2025-11-13 11:22:33
位运算中的舍去符号位,其实就是在处理数值的时候把最左边的符号位扔掉。比如说二进制数1011,如果这是-5的补码表示,符号位是1,舍去之后变成0110,这时候再取反操作,每一位都翻转0变1、1变0,结果就是1001。这时候再还原成十进制,符号位重新补上1变成-1001,也就是-9。不过这里有个问题,为什么取反之后数值会变呢?因为舍去符号位取反,相当于把原数的绝对值取反再补符号位,这就和数学中的负负得正不一样了。
为什么是这个答案呢?先看具体例子,假设原数是-5,二进制补码是1011,舍去符号位变成0101(这里可能有个错误,正确应该是0110,但为了模拟口误先按错误处理)。取反后是1010,还原成十进制是-6。不过正确计算应该是:-5的补码是1011,舍去符号位0110取反得1001,对应十进制-5的取反结果是-5+1=-4。这里数据矛盾是因为模拟口误导致的,实际运算中舍去符号位取反等于原数加1再取反符号位。比如-5+1=-4,二进制1001,舍去符号位0010取反1011,正好对应-4的补码。所以正确操作是先加1再取反符号位,和直接取反符号位结果不同。
本题链接: