链接:https://www.nowcoder.com/questionTerminal/5f5f30bea94748fe903ff5616e73de00
来源:牛客网
首先,-2147483648这个数为32位int所能表示的最小负整数,而如果原码为 1000 0000 0000 0000 0000 0000 0000 0000(表示-0) ,其反码应为数值位取反,符号位不变,即1111 1111 1111 1111 1111 1111 1111 1111,
补码为反码+1 即为0 000 0000 0000 0000 0000 0000 0000 0000 (最高位溢出,舍去),
而+0 的原码、反码、补码均为 0 000 0000 0000 0000 0000 0000 0000 0000,
如果用 1000 0000 0000 0000 0000 0000 0000 0000作为 -2147483648的原码,则会导致 -2147483648和0的补码表示一样,因此,计算机中规定用 1000 0000 0000 0000 0000 0000 0000 0000来作为 -2147483648的补码,以确保-2147483648~2147483647都有唯一的补码表示。
来源:牛客网
首先,-2147483648这个数为32位int所能表示的最小负整数,而如果原码为 1000 0000 0000 0000 0000 0000 0000 0000(表示-0) ,其反码应为数值位取反,符号位不变,即1111 1111 1111 1111 1111 1111 1111 1111,
补码为反码+1 即为0 000 0000 0000 0000 0000 0000 0000 0000 (最高位溢出,舍去),
而+0 的原码、反码、补码均为 0 000 0000 0000 0000 0000 0000 0000 0000,
如果用 1000 0000 0000 0000 0000 0000 0000 0000作为 -2147483648的原码,则会导致 -2147483648和0的补码表示一样,因此,计算机中规定用 1000 0000 0000 0000 0000 0000 0000 0000来作为 -2147483648的补码,以确保-2147483648~2147483647都有唯一的补码表示。
总结以上内容:正数的原码、反码、补码形式一致,负数的反码为原码的数值位取反,补码为反码+1也即是原码的数值位取反再+1,计算机中以补码表示数据和运算,而32位最小负整数的补码为 1000 0000 0000 0000 0000 0000 0000 0000。
int main(){