以前大學學過,這麼久沒用到又忘記了,寫到博客備忘
機器數和碼制
-
各種數據在計算機中表示的形式稱爲機器數。機器數有無符號和帶符號之分。其特點是採用二進制計數制,數的符號用0、1表示,小數點隱含表示而不佔位置。
-
爲了便於運算,帶符號的機器數可以採用原碼、反碼和補碼等不同的編碼方法,這叫碼制。
碼制的作用
在計算機內,機器數有無符號和帶符號數之分。
無符號數表示正數,在機器數中沒有符號位。對於無符號數,若約定小數點的位置在機器數的最低位之後,則是純整數;若約定小數點的位置在機器數的最高位之前,則是純小數。
對於帶符號數,機器數的最高位是表示正(0)、負(1)的符號位,其餘位則表示數值。若約定小數點的位置在機器數的最低數值位之後,則是純整數;若約定小數點的位置在機器數的最高數值位之前(符號位之後),則是純小數。
原碼、反碼、補碼、移碼如何表示?
舉例:45=00101101 -45=10101101 (以下所有例子都爲這兩個數的變換)
原碼:
原碼錶示法在數值前面增加了一位符號位(即最高位爲符號位):正數該位爲0,負數該位爲1(0有兩種表示:+0和-0),餘位表示數值的大小。
舉例:[+45]原=00101101 [-45]原=10101101
反碼:
反碼是數值存儲的一種,但是由於補碼更能有效表現數字在計算機中的形式,所以多數計算機一般都不採用反碼錶示數。
反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼則是其絕對值按位取反[或者說除符號位不變,其他位按位取反]。
舉例:[+45]反=00101101 [-45]反=11010010
補碼:
在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路。
反碼錶示法規定:正數的補碼與其原碼相同;負數一種簡單的方式,符號位保持1不變,數值位從右邊數第一個1及其右邊的0保持不變,左邊按位取反。也可以從反碼推補碼,就是在反碼的基礎上加1。
舉例:[+45]補=00101101 [-45]補=11010011
移碼:
移碼錶示法是在數X上增加一個偏移量來定義的,一般用於表示浮點數中的階碼。移碼(又叫增碼)是符號位取反的補碼,引入的目的是爲了保證浮點數的機器零爲全0。這個不分正負。
採用移碼錶示時,碼值大者其真值就大。
舉例:[+45]移=10101101 [-45]移=01010011
【0的表示】
數值零的原碼錶示有兩種
[+0]原=0000 0000
[-0]原=1000 0000
數值零的反碼錶示有兩種
[+0]反=0000 0000
[-0]反=1111 1111
數值0的補碼有唯一編碼
[+0]補=0000 0000
[-0]補=0000 0000