委外研发支出资本化:偶刚学C++,问大家一个按位求反的问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 07:51:52
我看了习题
i=~10 的答案是 -11
i=~-3 的答案是 2
可我还是不理解,能告诉偶是为什么吗?谢谢-_-!
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表示无符号十进制输出 */
就可以看出差别了。

10 的二进制存储就是 00001010
它的按位求反就是 11110101
也就是 -11。

-3 的二进制存储就是 11111101
它的按位求反就是 00000010
也就是 2。

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

先将-3划为二进制得00000011,再求反为11111100
再在末尾加1得11111101,最后再求反得00000010即2