负数的二进制存储采用 补码形式,这是计算机系统中处理有符号整数的标准方法。以下是具体说明:
一、补码的定义与原理
补码的计算规则 - 反码:
将原码除符号位外逐位取反(0变1,1变0)。例如,-2的原码为`0000 0010`,反码为`1111 1101`。
- 补码:反码加1。继续以上例,-2的补码为`1111 1101 + 1 = 1111 1110`(二进制)或`FE`(十六进制)。
补码的数学原理 补码的设计使得加法运算可以统一处理正数和负数,避免了减法运算。例如,计算`-3 + 5`时,补码运算等价于`5 - 3`,简化了硬件实现。
二、存储结构与范围
符号位的作用
- 最左边的位为符号位,0表示正数,1表示负数。
- 例如,32位整数中,`1000 0000`表示-128,`0111 1111`表示127。
表示范围
- 有符号整数: `-2^N`到`2^N-1`,其中N为位数。例如,8位有符号整数范围为-128到127。 - 无符号整数
三、示例说明
-2的存储:
原码:`0000 0010`
反码:`1111 1101`
补码:`1111 1110`(十六进制为`FE`)。
-22的存储:
原码:`0000 001010`
反码:`1111 110101`
补码:`1111 111010`(十六进制为`-22`)。
四、扩展说明
多精度表示:
32位整数范围:-2^31到2^31-1
64位整数范围:-2^63到2^63-1
Java中的`int`类型为32位,`long`类型为64位。
符号扩展:
当负数超出当前字节的表示范围时,需进行符号扩展。例如,将-34(二进制`1000 0010`)存储为16位时,需补齐为`1111 1111 1111 1000`。
总结
负数的二进制存储通过补码形式实现,利用了二进制的特性简化了运算。理解补码的关键在于掌握其计算规则和数学原理,同时注意符号位的处理。