ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

数据的表示(原码/反码/补码/移码 IEEE754浮点数)最全详解

数据的表示(原码/反码/补码/移码  IEEE754浮点数)最全详解 目标一文彻底搞定软考上午题中“数据的表示”所有考点。包含详尽概念、转换方法、运算规则、大量例题和解题技巧看完这篇不用再看其他资料。一、机器数与真值计算机中所有数据以二进制存储一个数值连同符号位一起编码后的形式称为机器数它实际代表的数值称为真值。符号位最高位0表示正1表示负。通常以固定位数表示如8位、16位、32位。机器数有四种常见编码原码、反码、补码、移码。二、原码True Form1. 定义最高位为符号位其余位表示数值的绝对值。正数符号位0数值部分就是真值的二进制。负数符号位1数值部分是真值绝对值的二进制。2. 求法直接根据定义写出。3. 例子8位字长真值原码500000101-510000101000000000-01000000012701111111-127111111114. 表示范围8位整数最大01111111 127最小11111111 -127有两个零0 和 -0所以范围是-127 ~ 127共255个不同编码256个编码中有两个零。5. 优缺点优点简单直观与真值转换容易。缺点存在0和-0浪费编码。加减运算需要单独处理符号位硬件复杂。很少直接用于运算多用于表示浮点数的尾数原码表示等场景。三、反码One’s Complement1. 定义正数的反码与原码相同。负数的反码符号位为1数值部分按位取反0变11变0。2. 求法正数直接等于原码。负数先写出正数的原码符号位不变其余各位取反。3. 例子8位字长真值反码500000101-511111010000000000-01111111112701111111-127100000004. 表示范围8位整数同原码-127 ~ 127也有两个零。5. 作用反码是求补码的中间步骤。在早期计算机中曾用于运算但现代计算机几乎不直接用反码运算。四、补码Two’s Complement1. 定义正数的补码与原码、反码相同。负数的补码在反码的基础上末位加1或等于模减去真值的绝对值。2. 求法方法一写出该数绝对值的原码按位取反符号位不变末位加1。方法二对于负数X补码 模 - |X|。例如8位字长模为2^8256-5的补码 256 - 5 251 11111011。3. 例子8位字长真值补码500000101-511111011000000000-000000000与0相同12701111111-12810000000特殊4. 表示范围8位整数补码中0的表示唯一。多出一个编码10000000表示-128。范围-128 ~ 127共256个不同数值。5. 补码的运算规则补码的符号位可以当作数值位参与运算结果仍为补码。加法[AB]补 [A]补 [B]补减法[A-B]补 [A]补 [-B]补即减去一个数等于加上它的补码取反加1。示例1计算 7 - 38位补码7的补码00000111 -3的补码11111101 相加 00000111 11111101 ---------- 100000100 最高位进位溢出丢弃 结果00000100 4示例2计算 -5 - 6-5补码11111011 -6补码11111010 相加 11111011 11111010 ---------- 111110101 溢出丢弃 结果11110101 -11 的补码6. 溢出判断当两个同号数相加或异号数相减结果超出了表示范围时发生溢出。判断方法方法一符号位判断两个正数相加结果符号为负或两个负数相加结果符号为正则溢出。方法二进位判断最高数值位向符号位的进位与符号位向更高位的进位不同则溢出。设C1为最高数值位向符号位的进位C2为符号位向更高位的进位若C1⊕C21则溢出。方法三双符号位法用两位符号位00表示正11表示负结果符号位为01或10则溢出。示例8位补码计算 100 100100补码01100100 100补码01100100 相加 01100100 01100100 ---------- 11001000 结果符号位为1负数但两正数相加应为正溢出实际上结果应为200超出了8位补码范围-128~127因此溢出。7. 补码的优点0的表示唯一。符号位参与运算简化硬件。减法可以用加法实现。现代计算机中整数普遍采用补码存储和运算。五、移码Offset Binary / Biased Representation1. 定义移码通常用于表示浮点数的阶码。在真值X上加上一个偏移量偏置值得到。2. 偏移量的选择对于n位二进制数偏移量一般为2^(n-1)或2^(n-1)-1。软考中常见规则移码 补码的符号位取反当偏移量为2^(n-1)时。例如8位字长偏移量128移码 补码符号位取反。3. 求法方法一先求补码然后将补码的符号位取反。方法二真值 偏移量再转换为二进制。如8位偏移1285的移码 5128 133 10000101-5的移码 -5128 123 01111011。4. 例子8位字长偏移量128真值补码移码50000010110000101-511111011011110111270111111111111111-1281000000000000000000000000100000005. 特点移码保持了数值大小顺序移码的无符号数值越大真值越大。因此两个浮点数比较大小时可以直接比较移码部分。在IEEE754中阶码采用移码表示但偏移量为2^(n-1)-1如单精度阶码8位偏移127。这一点注意区分。六、四种编码的比较与转换总结编码正数规则负数规则0的个数8位范围原码符号0绝对值符号1绝对值两个-127 ~ 127反码同原码符号1数值取反两个-127 ~ 127补码同原码反码1一个-128 ~ 127移码补码符号位取反补码符号位取反一个偏移后-128 ~ 127偏移128转换关系正数原码 反码 补码移码 补码符号位取反。负数原码 → 反码数值取反→ 补码1移码 补码符号位取反。七、浮点数表示与IEEE754标准1. 浮点数的基本格式一个二进制浮点数可以表示为N(−1)S×M×2E N (-1)^S \times M \times 2^EN(−1)S×M×2ES符号位0正1负。M尾数纯小数通常采用规格化形式。E阶码表示指数部分常用移码或补码表示。规格化使尾数的绝对值位于[0.5,1)或[1,2)以保证最高有效位为1提高精度。2. IEEE754标准IEEE754是目前最广泛使用的浮点数标准规定了单精度32位和双精度64位格式。1单精度float32位1位8位23位符号S阶码E移码偏移127尾数M隐含最高位1阶码8位采用移码表示偏置值 2^(8-1)-1 127。尾数23位存储的是小数点后的部分小数点前隐含1。真值N(−1)S×1.M×2E−127N (-1)^S \times 1.M \times 2^{E-127}N(−1)S×1.M×2E−1272双精度double64位1位11位52位符号S阶码E移码偏移1023尾数M隐含最高位1阶码11位偏置值 2^(11-1)-1 1023。真值N(−1)S×1.M×2E−1023N (-1)^S \times 1.M \times 2^{E-1023}N(−1)S×1.M×2E−10233. 特殊值阶码E尾数M表示的值全0全00正0或负0由符号位决定全0非0非规格化数极小值全1全0无穷大∞或-∞全1非0NaN非数4. 十进制转IEEE754单精度详细步骤例1将 -12.75 表示为IEEE754单精度浮点数。符号位S负数 → S 1绝对值二进制整数部分12 1100小数部分0.75 0.11合并12.75 1100.11规格化移动小数点使整数部分只有一位11100.111.10011 × 2^3指数真值为3。计算阶码EE 3 127 130 100000108位尾数部分隐含最高位1存储小数部分10011后面补0至23位10011000000000000000000组合S(1) E(8位) M(23位) 1 10000010 10011000000000000000000二进制串110000010100110000000000000000005. 十进制转IEEE754双精度示例例2将 0.5 表示为双精度浮点数。0.5 0.1二进制 1.0 × 2^(-1)S 0正数阶码E -1 1023 1022 0111111111011位尾数1.0隐含1存储0.0即52位全0组合0 01111111110 0000...052个06. IEEE754二进制串转十进制例3将单精度浮点数11000001010011000000000000000000转换为十进制。拆分S1, E10000010130, M10011000000000000000000指数e E - 127 130 - 127 3尾数隐含1所以实际尾数 1.10011二进制值 (-1)^1 × 1.10011 × 2^3 -1.10011 × 81.10011二进制 1 0.5 0 0 0.0625 0.03125 1.59375乘以8 12.75符号负 → -12.757. 浮点数的表示范围与精度以单精度为例最小规格化正数阶码最小为1E1尾数全0真值 1.0 × 2^(1-127) 2^(-126) ≈ 1.18 × 10^(-38)最大正数阶码最大为254E254因为255保留给特殊值尾数全1真值 ≈ (2 - 2^(-23)) × 2^(254-127) (2 - 2^(-23)) × 2^127 ≈ 3.4 × 10^38精度尾数23位有效数字为24位二进制约7~8位十进制有效数字。双精度范围约为 ±1.8 × 10^308精度约15~16位十进制有效数字。八、常见软考题型及解题方法题型一编码转换求原码、反码、补码、移码例1若机器字长为8位求十进制数 -37 的原码、反码、补码。解析37的二进制3241 100101用7位表示0100101不足补0原码符号位1 数值位10100101反码符号位不变数值取反11011010补码反码1 11011011例2某机器字长8位采用补码表示则十进制数 -128 的补码是解析8位补码范围 -128 ~ 127-128的补码为10000000特殊值。验证按规则-128绝对值128 100000008位取反01111111加110000000正是该值。例3若[X]补 11110000求X的真值。解析补码最高位为1是负数。真值 -补码取反1的绝对值取反00001111加100010000 16所以 X -16。题型二补码运算及溢出判断例4设机器字长8位用补码运算计算 45 - 23并判断是否溢出。解析45补码0010110123补码00010111-23补码11101001相加00101101 11101001 100010110最高位进位丢弃结果00010110 22两数异号相减不会溢出所以结果正确。例5若X-90Y-80用8位补码计算XY判断溢出。解析X补码-90 → 9001011010取反10100101加110100110Y补码-80 → 8001010000取反10101111加110110000相加10100110 10110000 1 01010110去掉进位得01010110 86正数两个负数相加结果为正说明溢出符号位判断。实际结果 -170 超出8位补码范围 -128~127。题型三十进制与IEEE754互转例6将十进制数 -0.75 表示为IEEE754单精度浮点数。解析0.75 0.11二进制规格化0.11 1.1 × 2^(-1)S1负数阶码E -1 127 126 01111110尾数1.1隐含1存储.1即1000…022个0组合1 01111110 1000000000000000000000010111111010000000000000000000000例7IEEE754单精度数01000001001000000000000000000000的十进制值是多少解析S0E10000010130M01000000000000000000000指数e 130-1273尾数 1.0100… 1.25值 1.25 × 2^3 10.0题型四浮点数表示范围/精度相关计算例8某浮点数格式为1位符号位5位阶码移码偏移1510位尾数隐含最高位1纯小数。求它能表示的规格化正数的最大值和最小值。解析阶码5位偏移15最大阶码真值 2^5-2全1保留给无穷大 30所以最大指数 30-1515。尾数10位隐含1最大尾数 1.1111111111二进制≈ 2 - 2^(-10)。最大正数 ≈ (2 - 2^(-10)) × 2^15。最小规格化正数阶码取最小值1全0保留给0真值 1-15 -14尾数最小为1.0所以最小值 2^(-14)。题型五特殊值判断例9IEEE754单精度中当阶码全0、尾数非0时表示什么解析表示非规格化数用于表示非常接近0的数其值为 (-1)^S × 0.M × 2^(-126)。例10判断01111111100000000000000000000000在IEEE754单精度中表示什么解析S0E11111111255全1M0 → 表示正无穷大 ∞。九、易错点与注意事项补码求负数时“取反加1”是指对数值位取反符号位不变但求补码后符号位可能变化如-128。**移码与补码符号位取反的关系只适用于偏移量为2(n-1)的情况**。IEEE754中阶码偏移量为2(n-1)-1不能直接套用该关系需用移码定义计算。原码、反码、补码的正数部分都相同。补码中100…0表示-2^(n-1)如8位补码10000000为-128。IEEE754中规格化尾数隐含最高位1转换时不要忘记加上这个1。浮点数表示范围由阶码决定精度由尾数位数决定。单精度浮点数的阶码范围1~2540和255有特殊意义。补码溢出判断同号相加结果符号改变即为溢出或采用双符号位法。十、总结与速记表速记1编码转换口诀正数原反补都相同移码符号取反。负数原码→反码数值取反→补码1→移码符号取反。补码转真值符号位为0直接算符号位为1数值取反加1后加负号。速记2IEEE754单精度格式1位符号8位阶码移码偏移12723位尾数隐含1。真值 (-1)^S × 1.M × 2^(E-127)特殊值E0,M0 → 0E255,M0 → ∞E255,M≠0 → NaN。速记3常用转换步骤十进制 → IEEE754符号位。绝对值二进制小数点移位规格化。指数偏移量得到阶码。小数点后部分填尾数隐含1不存。组合。IEEE754 → 十进制拆分S,E,M。E-偏移量得指数。尾数加隐含1计算1.M。按公式计算符号决定正负。发布日期2026-08-29
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表