整數和浮點數的表示方法

第一次寫博客,沒什麼經驗,會保持更新的,文章也會不斷優化的,請你們多多指教函數

整數表示

現代計算機存儲和處理的信息以二值表示,也便是隻包含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));io

浮點數表示

二進制小數

如下爲我的理解,先舉個例子:table

十進制表示 小數值 二進制表示
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
沒錯,整數減小一倍,二進制中小數點右移一位,若是整數增長一倍,則二進制中小數左移一位class

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位。float

相關文章
相關標籤/搜索