数据的表示

张开发
2026/4/4 16:55:52 15 分钟阅读
数据的表示
1. 数据的表示1.1 数制转换1.1.1 二进制转十进制一句话原理把每一位上的数字乘上它对应的“权重”然后全部加起来。步骤从右边开始数第 0 位、第 1 位、第 2 位……每一位的权重是2^位数把每一位的数字 × 权重全部相加结果就是十进制。例子二进制1011转十进制从右到左写位置3 2 1 0数字1 0 1 1计算1×2³ 0×2² 1×2¹ 1×2⁰ 1×8 0×4 1×2 1×1 8 0 2 1 11所以1011(₂) 11(₁₀)1.1.2 十进制转二进制一句话原理不断除以 2记录余数最后把余数倒着读。步骤用十进制数 ÷ 2记下余数0 或 1商继续 ÷ 2再记余数直到商变成 0把余数从下往上写就是二进制例子十进制13转二进制13 ÷ 2 6 余 16 ÷ 2 3 余 03 ÷ 2 1 余 11 ÷ 2 0 余 1余数从下往上1 1 0 1所以13(₁₀) 1101(₂)1.1.3 二进制 ↔ 八进制、十六进制1二进制 ↔ 八进制规则3 位二进制 1 位八进制方法二进制转八进制从右往左每 3 位分一组每组转成 0~7八进制转二进制每 1 位拆成 3 位二进制例子二进制10110分组010 110010 → 2110 → 6结果26(₈)八进制26转二进制2 → 0106 → 110拼接10110(₂)2二进制 ↔ 十六进制规则4 位二进制 1 位十六进制十六进制数字0~9A(10)、B(11)、C(12)、D(13)、E(14)、F(15)方法二进制转十六进制从右往左每 4 位一组十六进制转二进制每 1 位拆成 4 位例子二进制10110分组0001 01100001 → 10110 → 6结果16(₁₆)十六进制16转二进制1 → 00016 → 0110拼接10110(₂)1.2 原码、反码、补码、移码所有例子都用8 位二进制来讲最容易理解。8 位结构最高位是符号位0 正数1 负数1.2.1 原码最直观、最像人类写法的编码。规则正数符号位 0后面是数字的二进制负数符号位 1后面是数字绝对值的二进制例子8 位5 的原码0000 0101-5 的原码1000 0101特点好懂但 0 有两个0(00000000) 和 -0(10000000)减法不好算计算机不直接用原码计算1.2.2 反码只是过渡用的计算机本身也不直接用。规则正数反码 原码负数符号位不变其余位全部取反0 变 11 变 0例子5 原码0000 0101 → 反码0000 0101-5 原码1000 0101 → 取反1111 10101.2.3 补码计算机真正用来存储和计算的编码规则正数补码 原码 反码负数补码 反码 1例子5 补码0000 0101-5 反码1111 1010 → 1 → 补码1111 1011为什么要用补码可以把减法变成加法0 只有一种表示00000000硬件只需要加法器超级简单例子5 - 3 2用补码算5 的补码0000 0101-3 的补码1111 1101相加0000 01011111 11011 0000 0010最高位进位丢掉结果 0000 0010 2完全正确。1.2.4 移码专门给**浮点数的指数阶码**用的。规则移码 补码的符号位取反其余不变例子8 位5 补码0000 0101 → 符号位变 1 → 移码1000 0101-5 补码1111 1011 → 符号位变 0 → 移码0111 1011特点移码越大真实数值越大方便硬件直接比较大小只用于浮点数的阶码不用于普通整数1.3 浮点数计算浮点数就是计算机里的小数格式类似科学计数法N (-1)ˢ × 尾数 × 2^阶码计算分三步对阶尾数计算结果格式化1.3.1 对阶一句话小阶向大阶看齐阶码一样才能加减。步骤比较两个数的阶码小阶的数阶码变大尾数右移小数点左移直到两个阶码相等例子A尾数 1.01阶码 3B尾数 1.1阶码 5B 阶大A 要向 B 看齐A 阶码 2 → 尾数右移 2 位尾数 1.01 → 0.0101最终A尾数 0.0101阶码 5B尾数 1.1阶码 5阶码相同可以加减。1.3.2 尾数计算阶码对齐后尾数直接加减就像普通小数加减法。接上例A 尾数0.0101B 尾数1.1相加0.0101 1.1 1.1101阶码保持 5 不变。1.3.3 结果格式化规格化目的让尾数变成标准形式1.xxxxx整数部分必须是 1规则尾数太大 → 左移阶码减少尾数太小 → 右移阶码增加最后保证最高位是 1例子算完尾数是 10.11→ 右移 1 位 → 1.011→ 阶码 1最终变成标准浮点数格式。

更多文章