求高手解答C++入门问题!!!

2025-12-17 04:56:52
推荐回答(3个)
回答1:

这个应该是反码和补码的问题吧。
首先说几个概念:
正数的补码 与原码相同。
负数的补码 符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1
例如

原码:
7的原码是0 0000111
-7的原码是1 0000111
可见原码无法进行加法计算

反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
+7= 0 0000111
-7= 1 1111000

补码:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
+7= 0 0000111
-7= 1 1111001

计算内部都是用补码来存储数值的,所以你这个题的步骤是这样的:
先将123转成二进制数01111011,因为正数补码和原码一致,计算机存的是01111011
然后各位取反得10000100,这时第一位变成1,意味着现在表示的是一个负值,现在要求出这个负值是多少,也是按补码规则,保留符号位,将后面的位取反加1,得11111100,这个值就是-124。
希望你能理解,祝你进步!

回答2:

~的意思是按位取反,你的考虑少了这个

123的二进制表示是:01111011
按位取反的结果是:10000100
按照8bit算,就是-124

回答3:

有符号整数使用的是补码表示,而非原码

10000100是补码,求其值时是去掉符号位,后面的取反加1,即1111011+1=1111100,也就是4+8+16+32+64=124

所以是-124

参考资料是百科中“补码”的条目,你可以看一下