海正药业 雪球:偶刚学C++,问大家一个按位求反的问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 05:27:25
我看了习题
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表示无符号十进制输出 */
就可以看出差别了。

有符号的整型里面带有符号位 并不是所有位都表示数值大小

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

计算机里存储的数字是二进制的补码形式!不用原码存取