最全詳解)
目標一文徹底搞定軟考上午題中“數據的表示”所有考點。包含詳盡概念、轉換方法、運算規則、大量例題和解題技巧看完這篇不用再看其他資料。一、機器數與真值計算機中所有數據以二進制存儲一個數值連同符號位一起編碼后的形式稱為機器數它實際代表的數值稱為真值。符號位最高位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的表示唯一。符號位參與運算簡化硬件。減法可以用加法實現?,F代計算機中整數普遍采用補碼存儲和運算。五、移碼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