整數和浮點數的表示方法


第一次寫博客,沒什么經驗,會保持更新的,文章也會不斷優化的,請大家多多指教

整數表示

現代計算機存儲和處理的信息以二值表示,也即是只包含0和一的二進制數字,其中整數表示的方法分為有符號整數、無符號整數。常用的數字表示方法有二進制、十進制、八進制、十六進制。下表為十六進制、十進制、和二進制的對應表示法。

十六進制 0 1 2 3 4 5 6 7 8 9 A B C D E F
十進制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
二進制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

無符號整數

B2U() 為將二進制數轉換為無符號數的函數
B2U[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;
B2U[0101] = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 5;
B2U[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;
B2U[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;

設計算機為w位(上為4位,現在計算機一般為64位),則可以表示最大無符號整數為:(2^w - 1),最小為:0;

有符號整數

B2T[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;
B2T[0101] = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 5;
B2T[1011] = -1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = -5;
B2T[1111] = -1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = -1;

設計算機為w位(上為4位,現在計算機一般為64位),則可以表示最大無符號整數為:(2^(w-1) - 1),最小為:(-2^(w-1));

浮點數表示

二進制小數

以下為個人理解,先舉個例子:

十進制表示 小數值 二進制表示
1 1 000001
0.5 1/2 00000.1
0.25 1/4 0000.01
0.125 1/8 000.001
0.75 3/4 0000.11
1.5625 25/16 01.1001

∉εεεεεεεε
仔細看就會返現一個規律:
1的二進制表示為:000001,除以8,即2^3
3的二進制表示為:000011,除以4,即2^2
25的二進制表示為:011001,除以16,即2^4
沒錯,整數減少一倍,二進制中小數點右移一位,如果整數增加一倍,則二進制中小數左移一位

IEEE浮點表示

目前所有的計算機都支持的表示浮點數的標准
V = (-1)^s * M * 2^E

  • 數值(value)V
  • 符號(sign)s決定這數是負數(s = 1)還是正數(s = 0),而對於數值0的符號位解釋作為特殊情況處理。
  • 尾數(significand)M是一個二進制小數,他的范圍是1(2-ε),或者是0(1-ε)。
  • 階碼(exponent)E的作用是對浮點數加權,這個權重是2的E次冪(可能是負數)。
    將浮點數的位划分為三個字段,分別對這些值進行編碼:
  • 一個單獨的符號位s直接編碼符號s。
  • k位的階碼字段exp = e(k-1) + ... + e(0)編碼階碼E
  • n位小數字段frac = f(n-1) + ... + f(0)編碼尾數M,但是編碼出來的值也依賴於階碼字段的值是否等於0。

最常見的單精度浮點格式float32位:s 1位,exp k=8位,frac n = 23位。
雙精度浮點格式double:s 1位, exp k = 11位,frac n = 52位。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM