如图:C语言程序中无符号数a的值是负数,为什么作整形输出时的结果是64870?

为什么是这个64870?这个计数的结果是如何过来的?
2024-11-23 05:44:22
推荐回答(2个)
回答1:

负数在内存中是以补码的形式存储的,
即 -666
原码:1000 0010 1001 1010
反码:1111 1101 0110 0101 (符号位不变,其它位取反)
补码:1111 1101 0110 0110 (反码+1)
即,实际内存中的数据为0b1111 1101 0110 0110=64870
而a为unsigned short int,所以反馈的应该就是64870正数。

回答2:

-666 在内存中的是以补码的形式存在的
-666的原码是
1000 0010 1001 1010
补码是 原码除符号位(第1位)外各位取反+1,所以是
1111 1101 0110 0110

由于a是无符号数,所以第一位的1不在表示负数,1111 1101 0110 0110 的十进制数就是64870