原码、反码、补码、浮点数编码
原码、反码、补码、浮点数编码
Aristore1. 原码
直观理解:
原码是表示整数的一种最简单方式,它直接用一个位(0 或 1)来表示符号:
- 0 表示正数
- 1 表示负数
剩下的位数用来存储数字本身的绝对值。
举例:
假如有 8 位(8 bits):
- +5 表示为:
00000101
- 第一个 0 表示正号
- 后面
0000101
表示数字 5 的二进制
- -5 表示为:
10000101
- 第一个 1 表示负号
- 后面
0000101
表示数字 5 的二进制
特点:
- 表示简单,但计算(例如加减)会很麻烦。
2. 反码
直观理解:
反码是对负数的一种编码方式,规则如下:
- 正数的反码和原码相同。
- 负数的反码:符号位不变,其余各位按位取反(0 变 1,1 变 0)。
举例:
以 8 位表示:
- +5 的反码:
00000101
(和原码一样) - -5 的反码:
- 原码:
10000101
- 反码:
11111010
(符号位保持 1,后面取反)
- 原码:
特点:
- 解决了负数表示的问题,但加减法时仍然复杂。
3. 补码
直观理解:
补码是目前计算机中普遍使用的一种编码方式。规则是:
- 正数的补码和原码相同。
- 负数的补码:在反码的基础上末位加 1。
为什么用补码?
补码的好处是:
- 加减法运算简单(正负数加减统一了规则)。
- 补码可以唯一表示 0(反码有两个 0)。
举例:
以 8 位表示:
- +5 的补码:
00000101
(和原码一样) - -5 的补码:
- 原码:
10000101
- 反码:
11111010
- 补码:
11111011
(在反码基础上 +1)
- 原码:
补码的本质:
它让负数看起来像很大的正数。
比如:-5
的补码是 11111011
,其实是用 “二进制 251” 来代表 -5。
4. 浮点数编码
浮点数是用来表示带小数点的数字(比如 3.14 或 -0.01)。因为小数点的位置可以 “浮动”,所以叫 “浮点数”。
编码方式:
浮点数用科学计数法表示,比如:
−2.5=−1.25×101-2.5 = -1.25 \times 10^1
在计算机里,它会被拆成三个部分:
- 符号位(Sign,1 bit):表示正负号,0 是正,1 是负。
- 指数部分(Exponent,若干 bits):表示小数点的位置。
- 尾数部分(Mantissa,若干 bits):表示有效数字。
举例:
假如用 32 位浮点数表示 -2.5(按照 IEEE 754 标准):
- 符号位 S:1(负数)
- 指数 E:用偏移量方式编码,假如偏移量是 127,则 E=127 + 指数值 E = 127 + 指数值
- 这里指数是 1,所以 E=127+1=128E = 127 + 1 = 128,即二进制
10000000
- 这里指数是 1,所以 E=127+1=128E = 127 + 1 = 128,即二进制
- 尾数 M:2.5 写成 1.25×211.25 \times 2^1,小数部分
0.25
转成二进制是01
,结果是0100000...
(填充到 23 位)。
最终编码是:
1 | 符号位 指数 尾数 |
总结对比:
编码方式 | 适用范围 | 示例 | 主要特点 |
---|---|---|---|
原码 | 整数 | -5 = 10000101 |
符号位简单,计算麻烦 |
反码 | 整数 | -5 = 11111010 |
解决符号问题,但加减仍复杂 |
补码 | 整数 | -5 = 11111011 |
统一加减法,计算机主流使用 |
浮点数 | 小数 | -2.5 = 1 10000000 010... |
表示范围大,但格式复杂 |
评论
匿名评论隐私政策