標籤:
現實生活中,我們通常使用10進位來表示我們的數字,而在電腦中使用的是“0”和“1”表示數位二進位。
如果我們用一個位元組來儲存一個數字,那麼這個數字在電腦中的儲存形式可能是這樣的:00010011。最左邊的0位在帶符號數字中用來表示加號或減號,0代表正號,1代表負號,所以它也就叫做符號位;其他位元用來表示具體數字,因此叫做數值位。
00010011如果用來表示帶正負號的整數,那麼它代表的數字是+19。+19叫做真值,00010011用於在電腦中表示,所以叫做機器數。
機器數在電腦中的表示形式有三種,原碼,反碼和補碼。
原碼的表示:
左邊是符號位,正數為0,負數為1。其他位表示數值
【+10】原碼 = 00001010
【-10】原碼 = 10001010
【+0】原碼 = 00000000
【-0】原碼 = 10000000
反碼的表示:
正數的反碼和原碼相同,負數的反碼由原碼除了符號位的其餘位取反(即0表1,1表0)
【+10】反碼 = 00001010
【-10】反碼 = 11110101
【+0】反碼 = 00000000
【-0】反碼 = 11111111
補碼的表示:
正數的補碼與原碼相同,負數的補碼由原碼的反碼加1得到
【+10】補碼 = 00001010
【-10】補碼 = 【-10】反碼 + 1 = 11110101 + 1 = 11110110
【+0】補碼 = 00000000
【-0】補碼 = 【-0】反碼 + 1 = 11111111 + 1 = 【1】00000000(mod(256))
補碼的意義:補碼實際上是一種模運算,以時鐘為例,時鐘一圈是12個小時,即時鐘的模為12。如果當前時刻是3點鐘,在12個小時之後時刻變為15點,15在模12之後,依然是3點。再如,將3點的時針調慢一個小時,即調成2點,和將時針向前調整11個小時的效果是一樣的。因此用3-1和(3+11)mod(12)的結果一樣。補碼在機器碼中的運用主要是用加法元算代替減法運算。CPU的加法器簡單效率高,因此不需要再專門實現減法器。
在8位字中,我們的模就是2的8次方,即256。例如:
直接減法:01000000(64)— 00001010(10) = 00110110(54)
用補碼代替減法:01000000(64)+(11110110)(246)= 00110110(54)
兩種運算結果是一樣的。
數字在電腦中的表示