对于 2 的补码,最简单的方法是这个:
- 以二进制形式写入正值(此处为 32)
- 从右边开始阅读,跳过所有的零,直到找到第一个 1
- 保持原样
- 继续向左,这次反转每个数字 (1 => 0, 0 => 1)
示例:-7。7 是000111
。第一个 1 在右边,保留它然后反转其余的。你得到111001
.
因此,在您的示例中,您不能用六位表示 -32,因为第一个也是最后一个。Si 它将被读取100000
=> -011111
=> 31。
您至少需要再咬一口才能避免溢出(左边的最后一口是“符号”:0 表示正数,1 表示负数)。