二進位制編碼知識

2021-07-11 21:11:25 字數 1726 閱讀 5849

對於整型資料,二進位制的表示為符號位+數值位,

對於浮點型資料,十進位制轉二進位制的方式如下

將十進位制浮點型資料轉換為二進位制時分別將整數部分和小數部分轉化為二進位制

對於整數部分,每次除2取餘直到商為0,第乙個除法所得餘數為最低位。即將餘數反序排列

對於小數部分,每次將其小數字乘以2,取其整數字,直到小數字為0(然而存在死迴圈問題,即0.2*2,這大概就是精度問題了吧)

二進位制轉十進位制則將每一位按權展開後計算,即按權相加法,舉例如下:

對於整型資料,

10101 = 1*2^4+0*2^3+1*2^2+0*2^1+2*2^0 = 21

對於浮點型資料同理如下

10101.101 = 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 2*2^0 + 1*2^-1 + 0*2^-2 + 1*2^-3 = 21.625

講完二進位制的轉換後,便是浮點型資料在計算機記憶體中的儲存方式了。

浮點型資料的儲存方式是通過科學計數法儲存的。

浮點型資料的儲存方式為:符號位+指數字+小數字

舉例乙個float資料,四個位元組32位。第乙個位是符號位,同理整數,0為正1為負。而後八個位為指數字,剩餘23個位小數字。

double則11個指數字和52個小數字。(以下舉例均為float型資料)

對於上述的21.625,二進位制的表示為10101.101,則其科學計數法為1.0101101 * 2^4 即符號位為0,指數字為10000011,小數字為0101 1010 0000 0000 0000 000

指數字10000011對應的十進位制為131,而不是4。這裡是因為為了能表示負的指數,ieee 754規定有乙個偏差值,就像有符號整數和無符號整數一樣,對於乙個byte資料,有符號表示的範圍是-127到128,無符號表示區域為0-255。因此,131對於乙個有符號表示的資料而言,應該是+4。同理,123應該是-4。對於float資料,這個指數域的偏差值為127,對於double資料,這個偏差值為1023。而指數域又稱為階碼

對於上面例子中的小數字,其為0101101 而不是 10101101(少了第乙個數字1)。這是因為通過科學計數法表示時,總是將乙個浮點型二進位制資料通過移位,使得小數點的左邊為1(移了多少位,指數域就為多少。) ,因此這個1的表示被省略了,從而能在尾數多空出乙個二進位制位。

最後,對於二進位制儲存,計算機中按位元組儲存,乙個位元組分為八位,而八位又區分為高位和低位,即前四位為高位,後四位為低位。對於小端序的cpu,是先儲存低位後高位,對於大端序cpu,儲存方式為先高位後低位。具體可參考自位元組序 - 維基百科

值得一提的是,由於數值在計算機中以補碼的形式儲存,而int型別一般是四個位元組,即可以表達的數字最大是2^32,但是,為了能表示負數所以把最高位作為符號位。數值範圍是-2147483648~2147483647,正數的最小值是0,負數的最小值則是-2147483648。

而計算機運算是以補碼運算的。因此,當正數的最大值2147483647的補碼是

0111 1111 1111 1111,

當這個數字+1時,便變成了

1000 0000 0000 0000

最高位符號位是1,因此計算機便將其作為了乙個負數,將其補碼轉化為原碼就是

1000 0000 0000 0000

這恰好是負數的最大值。因此常見的數值溢位,乙個2147483647加1就變成了-2147483648

ieee 754 – 維基百科

二進位制編碼 小記

byte 範圍 128 127 16進製制 0xff 二進位制 1111 1111 int 256 解為 首一位為符號位 整體取反碼 0000 0000 加1 為0000 0001 為1 加上符號為 byte 1 例如 16進製制 0x7f 二進位制 0111 1111 int 127 解為 首一位...

二進位制的編碼

假設有乙個只有4位的二進位制 0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,共16個數,來表示 8到7共16個數。很自然的我們想到用0000 0111來表示0 7.8到 1該用誰來表示呢...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...