二进制、原码、反码、补码详解(含计算公式与案例)
在计算机中,数值通常以 二进制补码(Two’s Complement) 存储,但在此之前,我们需要理解 原码、反码、补码 的概念及其转换关系。
1. 基本概念
(1) 二进制(Binary)
计算机使用 二进制(0 和 1) 存储数据,每一位称为 bit,8 bit = 1 byte。
(2) 原码(True Form)
- 最高位表示符号(
0为正,1为负) - 其余位表示数值的绝对值
- 示例:
+5的原码:00000101-5的原码:10000101
(3) 反码(Ones’ Complement)
- 正数的反码 = 原码
- 负数的反码 = 原码符号位不变,其余位取反
- 示例:
+5的反码:00000101(与原码相同)-5的反码:11111010(符号位不变,其余取反)
(4) 补码(Two’s Complement)
- 正数的补码 = 原码
- 负数的补码 = 反码 + 1
- 示例:
+5的补码:00000101(与原码相同)-5的补码:11111011(反码11111010+1)
2. 计算公式
(1) 原码 → 反码
| 数值 | 规则 |
|---|---|
| 正数 | 反码 = 原码 |
| 负数 | 反码 = 符号位不变,其余位取反 |
(2) 反码 → 补码
| 数值 | 规则 |
|---|---|
| 正数 | 补码 = 反码 = 原码 |
| 负数 | 补码 = 反码 + 1 |
(3) 补码 → 原码
| 数值 | 规则 |
|---|---|
| 正数 | 原码 = 补码 |
| 负数 | 原码 = 补码取反 + 1(即补码的补码) |
3. 计算案例
案例 1:计算 -6 的原码、反码、补码
- 原码:
-6是负数,符号位16的二进制:0000110- 原码:
10000110(1表示负,0000110是6)
- 反码:
- 符号位不变,其余取反:
10000110→11111001
- 补码:
- 反码
11111001+1=11111010
- 反码
最终结果:
| 表示法 | 二进制 |
|---|---|
| 原码 | 10000110 |
| 反码 | 11111001 |
| 补码 | 11111010 |
案例 2:计算补码 10101010 对应的十进制值
- 判断符号:
- 最高位
1→ 负数
- 最高位
- 补码 → 反码:
- 补码
10101010-1=10101001
- 补码
- 反码 → 原码:
- 符号位不变,其余取反:
10101001→11010110
- 计算数值:
- 原码
11010110→- (1×64 + 0×32 + 1×16 + 0×8 + 1×4 + 1×2 + 0×1) = -86
- 原码
最终结果:
10101010(补码) =-86(十进制)
案例 3:byte 类型的 -128 为什么是 10000000?
byte是 8 位补码表示,范围-128~127127=01111111-128的计算:128的二进制:10000000- 补码表示
-128:- 没有
+128(因为byte最大正数是127) 10000000直接表示-128(补码规则)
- 没有
4. 为什么计算机使用补码?
- 统一
+0和-0:- 原码:
+0=00000000,-0=10000000(浪费一个编码) - 补码:
0=00000000,-128=10000000(无-0)
- 原码:
- 简化运算:
- 减法可以转换为加法(
A - B=A + (-B)) - 例如:
5 - 3=5 + (-3):5的补码:00000101-3的补码:11111101- 相加:
00000101 + 11111101 = 00000010(2,正确)
- 减法可以转换为加法(
- 硬件实现简单:
- 不需要额外的减法电路,只需加法器。
5. 总结
| 表示法 | 正数 | 负数 |
|---|---|---|
| 原码 | 符号位 0 + 数值 | 符号位 1 + 数值 |
| 反码 | 与原码相同 | 符号位不变,其余取反 |
| 补码 | 与原码相同 | 反码 + 1 |
关键点:
- 计算机存储整数用补码(简化运算,避免
-0) byte范围-128~127(10000000表示-128)- 补码转十进制:
- 正数:直接计算
- 负数:补码 → 反码 → 原码 → 计算绝对值并加负号
掌握这些概念,能更好地理解计算机如何处理 有符号整数! 🚀
5240

被折叠的 条评论
为什么被折叠?



