数值类型的转换搞不清楚啊!
有这么一些代码:char c=-23;
int i=c;
printf("%d",i);
我认为最后的结果应该是输出233,但实际结果却是-23。。。。。。
我跟大家说一下我的思路,不知道哪里错了:
首先int类型的有16位,char类型的有8位,
则char c=-23就是把一个int类型的常量-23(11111111 11101001)复制给一个char类型的变量
结果是截断,将11101001赋给了char类型变量,所以现在变量c实际存放的是11101001
然后第二部int i=c的时候,把11101001赋给了00000000 00000000,结果是00000000 11101001,所以现在变量i实际存放的是00000000 11101001
这个数对应的十进制数是233;所以最终输出233
[解决办法]
char赋值给int会进行带符号扩展,前面补1而不是补0
如果你unsigned char c = -23; int i = c;的话出来就该是233了
[解决办法]