补码问题:无符号数据的补码是不是就是他本身
在一本书上的一个 输出数据的补码 示例中:
- C/C++ code
int main(){unsigned short int a, b=1;printf("input an octal number:");scanf("%o", &a);b = a &0100000;if (b == 0100000) a = ~a+1;printf("result:%o\n", a);return 0;}
正数的补码为原码本身, 负数的补码位整数的原码按位取反末位加1.
输入:177777
输出:result:1
177777是整数啊, 为什么输出不是177777啊?
[解决办法]
正确的说法是:补码用于表达有可能为负的数据,所以无符号数没有补码表达形式。
[解决办法]
计算机中的所有数据都是由补码表示。
由补码的定义,正数的补码是其本身,而无符号数(可以看成是一个正数)的补码就是他自己。。
但无论正负,数在计算机中的表示都是以二进制的形式保存。无论你怎么操作,都是对二进制操作。
LZ你的问题就是,对于一个正数,采用了负数补码的计算方式