假设机器是32位的,分析以下代码的输出结果:
printf("%d\n", -1); //-1
printf("%u\n", -1); //1^32 - 1
printf("%d\n", (char)-1); //-1
printf("%u\n", (char)-1); //1^32 - 1
printf("%d\n", 255); //255
printf("%d\n", (char)255); //-1
printf("%u\n", (char)255); //1^32 - 1
1、 -1的原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码:1111 1111 1111 1111 1111 1111 1111 1111(储存形式)
2、当-1的补码被当做无符号类型打印时,数值为1的32次方减一。
3、由①有——当-1被当做char来看,补码:1111 1111 (储存形式)
反码:1111 1110
原码:1000 0001
4、同②,无符号类型打印结果为1的八次方减一;
当char类型被无符号类型打印时,由于char是带符号类型,因此对char进行符号扩展,高位补1,因此结果为1111 1111 1111 1111 1111 1111 1111 1111
因此打印结果也是1的32次方减一。
5、(int)255 原码:0000 0000 0000 0000 0000 0000 1111 1111
补码为其本身;
6、由⑤可知:255做char看时,其储存形式为 1111 1111
同③,int类型打印结果为-1;
7、同④,无符号类型打印结果为1的32次方减一;
关于[符号扩展]