返回信息流#include<stdio.h>
int main()
{
char c1=100;
char c2=200;
char c3=c1+c2;
printf("c2==%d",c2);
printf("c3==%d",c3);
}
请问输出什么?为什么?
假设字符型占8位。int型占32位。
谢谢
这是一条镜像帖。来源:北邮人论坛 / cpp / #34260同步于 2009/12/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于类型转换的问题,请教大牛们!难道没人会??
chemical
2009/12/26镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 chemical 的大作中提到: 】
: #include<stdio.h>
: int main()
: {
: ...................
运行的时候出现错误,超出char类型的范围,但是书上说c2被解释为-56,为什么?有人知道吗?
这题不完全是类型转换的问题
有符号字符型变量表示的范围是 -128~+127
所以问题出在c2=200这句上
200是个整形,是0x000000c8, 赋给c2后前面的0全部被截断,包括符号位
200=(11001000)2,所以c2=(11001000)2,但是c2是有符号数,第一位是符号位,所以c2的实际值是-(1001000)2取反加+1,即-(0111000)2=-(56)10
后面c3==-56+100==44