原碼 反碼 補碼 與無符號數(C語言)

2021-10-07 15:04:37 字數 1175 閱讀 8309

將最高位作為符號位(0代表正,1代表負),其餘各位陣列代表數值本身的絕對值。

打個比方

+7的原碼是0000 0111

-7的原碼是1000 0111

最高位決定了這個數是正數還是負數,其餘位數就是該數的二進位制。

如果乙個數為正,那麼它的反碼和原碼相同。

如果乙個數為負,那麼符號位為1,其他個位與原碼相反。

+7的反碼0000 0111 與原碼相同

-7的反碼1111 1000 首先最高位要為1,其次其他的位數要與原碼相反

正數的原碼、反碼、補碼都相同

負數最高位為1,其餘個位於原碼取反,最後+1,也就是說先反碼再+1就是補碼

+7的補碼 0000 0111

-7的補碼 1111 1001 1111 1000是-7的反碼,再在最後+1就變成了補碼

在計算機裡,負數都是按照補碼存放的,原碼和反碼都不利於計算機的運算,假如7 - 7還需要判斷符號位,如果使用補碼,減法可以用加法來實現。

0000 0111 + 1111 1001 = 1 0000 0000 再進行擷取,因為這是九位,已經超出了最大值,擷取出來的全是0,所以結果就是0了。

再打個比方-7 + 6 = -1

1111 1001 + 0000 0110 = 1111 1111 = -1

注意:這裡的結果1111 1111是補碼,-1的原碼是1000 0001,反碼是1111 1110,變為補碼後就成了1111 1111

在c語言中驗證這個結果

#include

intmain

(int argc,

char

const

*ar**)

無符號數指的是二進位制裡的最高位也可以表示這個數的大小,而不是表示這個數的正負,有符號數的最高位代表了這個數是正數還是負數。

假如說乙個char型別變數,char型別的最大值是0111 1111 = 127,最小值是1111 1111 = -127,如果無符號數那麼它的最大值為:1111 1111 = 255,為什麼?最高位的1不再表示正負數了,這也代表著使用無符號數就沒有負數了,所以它的取值範圍是0-255。

原碼,反碼,補碼,有符號數和無符號數

請先看以下博文 原碼,反碼,補碼 詳解 c語言系列 二 有符號數和無符號數詳解 有符號數,無符號數 對於乙個二進位制數,它可以是有符號數,也可以是無符號數,具體是哪個,由 決定。比如 1000 0001無符號數 當前二進位制的大小,即1000 0001表示129 有符號數 將最左邊一位做為符號位,剩...

原碼 反碼 補碼 有符號數和無符號數運算

原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 原 1000 0001 第一位是符號位.因為第一位是符號位,所以8位二進位制數的取值範圍就是 1111 1111 0111 1111 即 127 127 原碼是人腦最容易理...

符號數表示 原碼 反碼 補碼

計算機中的符號數有三種表示方法,即原碼 反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示 正 用1表示 負 而數值位,三種表示方法各不相同。在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理 同時,加法和減法也可以統一處理。此外,補碼與原...