在计算机中,正负数的二进制表示主要通过 符号位来区分,具体方法如下:
一、基本表示方法
符号位约定
- 最高位(最左边的位)为符号位:
- `0` 表示正数
- `1` 表示负数
- 其余位表示数值的绝对值(二进制形式)。
原码表示
- 正数:符号位为 `0`,后接绝对值的二进制表示(如 `+5` 表示为 `00000000 00000000 00000000 00000101`)。
- 负数:符号位为 `1`,后接绝对值的二进制表示(如 `-5` 表示为 `10000000 00000000 00000000 00000101`)。
二、补码表示(核心方法)
为了解决原码和反码在加减法运算中的局限性,计算机普遍采用 补码表示负数:
计算补码的步骤
- 取绝对值的原码,除符号位外所有位取反(反码)。
- 反码加 `1` 得到补码(如 `-5` 的补码为 `10000000 00000000 00000000 00000101 + 1 = 10000000 00000000 00000000 00000110`)。
补码的优势
- 加法运算统一:补码使得减法运算可转化为加法运算(如 `M - N = M + (-N)`)。
- 简化硬件设计:避免了对符号位的特殊处理。
三、特殊说明
无符号数
- 所有位均表示数值,无符号数不能直接表示负数(如 `11111111` 表示 `255`,而非 `-1`)。
数据类型影响
- 不同数据类型(如 8位、16位、32位)仅影响符号位的位数,但补码的计算规则一致。
四、示例总结
| 数值 | 原码(8位) | 反码(8位) | 补码(8位) |
|------------|------------------|------------------|------------------|
| +5 | 00000000 00000000 00000000 00000101 | 00000000 00000000 00000000 00000101 | 00000000 00000000 00000000 00000101 |
| -5 | 10000000 00000000 00000000 00000101 | 11111111 11111111 11111111 11111010 | 10000000 00000000 00000000 00000110 |
| -128 | 10000000 00000000 00000000 00000000 | 11111111 11111111 11111111