因為計算機內表示數值使用的是補碼,而不是原碼,所以你才有這樣的疑問。下面我簡單解釋一下你就明白了。
原碼就是這個數本身的二進位制形式。 以8位二進位制為例
0000001 就是+1
1000001 就是-1
補碼分為兩種情況:1、正數的補碼與原碼一樣;2、負數的補碼是符號位保持不變,其餘各位取反,再加1。
反碼就是負數符號位不變,其餘各位取反,正數反碼與原碼相同。
以四位二進位制為例,其原碼、反碼、補碼為:
真值 原碼 反碼 補碼
7 0111 0111 0111
6 0110 0110 0110
5 0101 0101 0101
4 0100 0100 0100
3 0011 0011 0011
2 0010 0010 0010
1 0001 0001 0001
0 0000 0000 0000
-0 1000 1111 0000
-1 1001 1110 1111
-2 1010 1101 1110
-3 1011 1100 1101
-4 1100 1011 1100
-5 1101 1010 1011
-6 1110 1001 1010
-7 1111 1000 1001
為什麼要設立補碼呢?
第一是為了能讓計算機執行減法:[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
16位二進位制原碼表示的負數是 -0~-32767,包括-0加起來是32768個數;因為補碼加了1,所以補碼的表示範圍是 -1~-32768,也是32768個數。
n位補碼能表示的範圍的公式是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數多乙個
原碼反碼補碼的概念
比如求 43 首先先把43轉為二進位制 因為乙個位元組是8位 最高位是符號位 轉二進位制就是 101011因為乙個位元組八個位所以前面補為0 0 0101011 上面的最左邊的0是最高符號位,也就表示的是 號 43的原碼 0 0101011 反碼分兩類 正數的反碼和原碼補碼是一樣的,補碼正數的反碼和...
原碼 反碼 補碼知識詳細講解
本篇文章講解了計算機的原碼,反碼和補碼.並且進行了深入探求了為何要使用反碼和補碼,以及更進一步的論證了為何可以用反碼,補碼的加法計算原碼的減法.論證部分如有不對的地方請各位牛人幫忙指正 希望本文對大家學習計算機基礎有所幫助 一.機器數和真值 在學習原碼,反碼和補碼之前,需要先了解機器數和真值的概念....
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...