二進制的源碼 補碼 反碼

二進制

我們常用的十進制是「逢十進一」的,我們只需要使用0、1、2、3、4、5、6、7、8、9這10個數字符號,

就能表示所有的自然數。與此類似,二進制是「逢二進一」的進位制,它只需要使用0、1這兩個數字符號,就能表示所有的自然數。

例如

0000 0000(二進制) 表示 0(十進制)

0000 0001(二進制) 表示 1(十進制)

0000 0111(二進制) 表示 7(十進制)

11111111(二進制) 表示 255(十進制)

正數的原碼  反碼 補碼都是本身


負數的 反碼:先取絕對值,保留第一位符號位,剩餘的取反;

      補碼:在反碼的基礎上 最後一位加一;


注意:0的反碼、補碼都爲

在計算機系統中,數值一律用補碼錶示(存儲),原因在於:使用補碼,可以將

符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補

碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄。

在計算機系統中,數值一律用補碼錶示(存儲),原因在於:使用補碼,可以將

符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補

碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄

在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;

同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路。



在計算機系統中,數值一律用補碼錶示(存儲),原因在於:使用補碼,可以將

符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補

碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄。

在C中 對於溢出的數據

C語言的整型溢出,分爲無符號整型溢出和有符號整型溢出。
對於unsigned整型溢出,C的規範是有定義的——“溢出後的數會以2^(8*sizeof(type))作模運算”,也就是說,如果一個unsigned char(1字符,8bits)溢出了,會把溢出的值與256求模。如:
1.unsigned char x = 0xff;

2.printf("%dn", ++x);
上面的代碼會輸出:0 (因爲0xff + 1是256,與2^8求模後就是0)
對於signed整型的溢出,C的規範定義是“undefined behavior”,也就是說,編譯器愛怎麼實現就怎麼實現。

在計算機系統中,數值一律用補碼錶示(存儲),原因在於:使用補碼,可以將

符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補

碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章