活死人 墓地咆哮:问大家一个C++按位求反的问题

来源:百度文库 编辑:高考问答 时间:2024/04/28 03:07:17
我看了习题
i=~10 的答案是 -11
i=~-3 的答案是 2
可我还是不理解,能告诉偶是为什么吗?谢谢-_-!

有朋友告诉偶
10 的二进制存储就是 00001010
它的按位求反就是 11110101
也就是 -11。
可我还想问
10 的二进制存储就是 00001010
它的按位求反就是 11110101
11110101的值不是128+64+32+16+4+1吗?
怎么变成-11了呢

你说的没有错啦。以下假定int是8位的。
i=~10在机器内就是11110101.
但是11110101输出时存在表达问题,即:
你认为11110101 是无符号的还是有符号的。
如果是无符号的,则=128+64+32+16+4+1=245。你可以试一试:
printf("%d",~10);
如果是有符号的,最高位表示符号,则=-128+64+32+16+4+1=-11。你可以试一试:
printf("%ud",~10); /* %ud表示无符号十进制输出 */
就可以看出差别了。

计算机里存储的数字是二进制的补码形式!
你说的源码!

11110101 就是-11的补码啊!想想对不?呵呵

最高位为符号位,8位二进制取值区间为127~-128