C語言 原碼 反碼和補碼之間的區別及轉換計算

2021-09-27 03:26:27 字數 827 閱讀 8273

這裡補充講解一下原碼:

原碼就是用左邊第一位表示符號, 其餘位表示絕對值. 符號位:正數為0,負數為1.比如如果是8位二進位制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是:

[1111 1111 , 0111 1111]

即[-127 , 127],

原碼是人腦最容易理解和計算的表示方式.

如果資料為有符號的話,則0也會分為+0,其原碼為[0000 0000]和-0,其原碼為[1000 0000]。

但是-0沒有實際意義,原碼的-0二進位制表示為1000 0000,。但是-1+(-127)用補碼計算的話,得出的補碼也為1000 0000,所以此補碼的真值應為-128。

所以用補碼表示資料範圍時,原碼真值的-0的二進位制形式就成為了-128的補碼二進位制形式。所以用補碼表示數時,其真值就會比原碼多出乙個最小負值。

使用補碼, 不僅僅修復了0的符號以及存在兩個編碼的問題, 而且還能夠多表示乙個最低數。

這就是為什麼8位二進位制, 使用原碼或反碼表示的範圍為[-127, +127],二進位制表示形式[1111 1111,0111 1111];而使用補碼表示的範圍為[-128, 127],二進位制表示形式[1000 0000,0111 1111]。

因為機器使用補碼儲存數字, 所以對於程式設計中常用到的32位int型別, 可以表示範圍是:

因為第一位表示的是符號位.而使用補碼表示時又可以多儲存乙個最小值.

C語言原碼 反碼 補碼

原碼 反碼 補碼 計算機的基本儲存單元是位元組 byte 計算的的最小儲存單元是位 bit c語言當中的數被分為有符號數和無符號數 有符號數是 正數 負數 0 無符號數是 0 不帶符號的正數 對於無符號數和有符號數的0和正數,原碼 反碼 補碼一致 對於有符號數,最高位為符號位,0代表 1代表 對於有...

C語言 原碼 反碼 補碼

c語言 原碼 反碼 補碼 本文以12和 12 為例,簡要介紹正數和負數的原碼 反碼 補碼求解過程 注 本文均以c語言中整數int所佔4位元組32位形式來求解!正數原碼 反碼 補碼 1 求解方法 正數的原碼 反碼 補碼!2 例子 求解12的原碼 反碼和補碼?解 12對應的二進位制形式為 1100 原碼...

C語言的原碼,反碼,補碼

1 原碼表示 原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用 表示負號,數值一般用二進位制形式表示。設有一數為x,則原碼表示可記作 x 原。例如,x1 1010110 x2 一1001010 其原碼記作 x1 原 1010110 原 01010110 x2 原 1001010 原 1...