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

2022-03-14 04:22:33 字數 2465 閱讀 4496

1)原碼表示

原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用:表示負號,數值一般用二進位制形式表示。設有一數為x,則原碼表示可記作[x]原。

例如,x1= +1010110

x2= 一1001010

其原碼記作:

[x1]原=[+1010110]原=01010110

[x2]原=[-1001010]原=11001010

在原碼表示法中,對0有兩種表示形式:

[+0]原=00000000

[-0] 原=10000000

2)補碼表示

機器數的補碼可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,並在未位加1而得到的。設有一數x,則x的補碼表示記作[x]補。

例如,[x1]=+1010110

[x2]= 一1001010

[x1]原=01010110

[x1]補=01010110

即 [x1]原=[x1]補=01010110

[x2] 原= 11001010

[x2] 補=10110101+1=10110110

(3)反碼表示法

機器數的反碼可由原碼得到。如果機器數是正數,則該機器數的反碼與原碼一樣;如果機器數是負數,則該機器數的反碼是對它的原碼(符號位除外)各位取反而得到的。設有一數x,則x的反碼表示記作[x]反。

例如:x1= +1010110

x2= 一1001010

[x1]原=01010110

[x1]反=[x1]原=01010110

[x2]原=11001010

[x2]反=10110101

反碼通常作為求補過程的中間形式,即在乙個負數的反碼的未位上加1,就得到了該負數的補碼。

負數的二進位制表示:|負數|-1,然後取反。

例1. 已知[x]原=10011010,求[x]補。

分析如下:

由[x]原求[x]補的原則是:若機器數為正數,則[x]原=[x]補;若機器數為負數,則該機器數的補碼可對它的原碼(符號位除外)所有位求反,再在未位加1而得到。現給定的機器數為負數,故有[x]補=[x]原十1,即

[x]原=10011010

[x]反=11100101+1

[x]補=11100110

例2. 已知[x]補=11100110,求[x]原。

分析如下:

對於機器數為正數,則[x]原=[x]補

對於機器數為負數,則有[x]原=[[x]補]補

現給定的為負數,故有:

[x]補=11100110

[[x]補]反=10011001+1

[[x]補]補=10011010=[x]原+1

[[x]補]補=10011010=[x]原

總結一下,

原碼(為負時,正值都不變)全部取反即得到反碼,反碼加"1"就得到補碼了,就是這麼簡單。

備註:取反(~)是一種運算,也就是求乙個數的反碼。比如int a = 1; ~a就是-2. (作用:能將第|~a|位置0)

首先要知道,在計算機中,負數以其正值的補碼形式表達

這樣我們就要知道三個概念了,原碼,反碼和補碼。

原碼:乙個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。

反碼:將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼。取反操作指:1變0, 0變1。

補碼:反碼加1稱為補碼。也就是說,要得到乙個數的補碼,先得到反碼,然後將反碼加上1,所得數稱為補碼。

正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1

由上所知,8按位取反以十進位制輸出的過程:

1、8的原碼為:0000 0000 0000 0000 0000 0000 0000 1000

2、按位取反:1111 1111 1111 1111 1111 1111 1111 0111;由於最前面一位為1,所以為負數。即即按位取反後得的為負數

下面以十進位制輸出:負數以其正值的補碼形式表達:

3、2步所得的數(是其正為取反,符號不變,最高位還是為1)取反:1000 0000 0000 0000 0000 0000 000 1000

4、反碼加1:1000 0000 0000 0000 0000 0000 000 1001;這樣就得負數的正值的補碼形式。也就是-9了。

再舉一例子啊。如2按位取反。

0000 0000 0000 0000 0000 0000 0000 0010(原碼)

1111 1111 1111 1111 1111 1111 1111 1101(按位取反,符號改變

1000 0000 0000 0000 0000 0000 000 0010 (正值的反碼,符號不變

1000 0000 0000 0000 0000 0000 000 0011 (加1,結果為-3)

C語言原碼 反碼 補碼

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

C語言 原碼 反碼 補碼

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

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 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 當...