c语言类型转换操作问题
这个问题有点麻烦。
那是真的
虽然你声明没有签名?夏尔?a、b、c、d、e;
但实际上在进行+-*/四则算术运算时,他实际上是把它当作一个整型变量int。
先看a=0?这没有错。
B=251,0000如果是int类型?0000?1111?1011(一共32个,我只写这些)
而是因为b未签名?Char类型,所以B的每个二进制位是1111?1011
嗯,重点来了。
A-b==-251此时已经变成了int类型,在计算机中是-251的二进制表示(补码)。
251?:0000?0000?0000?0000?0000?0000?1111?1011
251的反码:1111?1111?1111?1111?1111?1111?0000?0100加1:表示-251。
1111?1111?1111?1111?1111?1111?0000?0101
这是-251在内存中的表示。
良好的
此时这个值赋给d,所以只剩下最低的8位数字0000。0101,另一个无符号数。看,已经5点了。
所以d的值最终是5。
这里C=(a-b)/4
-251/4==-62(整型)
-62在电脑里说:
62:?0000?0000?0000?0000?0000?0000?0011?1110
anticode plus 1:1111?1111?1111?1111?1111?1111?1100?0001+1
?1111?1111?1111?1111?1111?1111?1100?0010
取最低的8位给c赋值:
c?:1100?0010
因为c是无符号的?夏尔?最高有效位不是符号位,换算成整数就是194。
所以最后C是194,D是5。