c語言原碼補碼
㈠ c語言中的原、反、補碼
c語言中,所有的整型數據實際存儲的都是補碼。
要計算補碼,先要知道原碼的概念,原碼也就是一個10進制數的二進製表達方式,比如100的原碼為1100100。
補碼的計算原則為:
1
對於無符號數以及有符號數中的正數,其補碼就是原碼本身;
2
對於有符號數中的負數,其補碼為真值絕對值的反碼加一,其中反碼為原碼按位取反。
針對負數舉例說明:
-100在用char型(8位)表示時,其補碼可以按照如下流程計算。
1、
100的原碼為01100100
2、按位取反,得到反碼為10011011
3、將反碼加1,
即10011011+1
=
10011100。
於是-100的補碼表示就是10011100,也就是0x9c(16進制)。
㈡ c語言中的原碼,反碼,補碼有什麼作用,是用來做什麼的
整數,存儲計算機中,就是補碼。
但是,C 語言,是高級語言。
那麼,用高級語言編程,就不需要討論計算機內部的存儲形式。
因此,C 語言和補碼,是完全不相關的兩碼事。
在 C 語言中,討論補碼(原碼反碼),顯然是外行。
㈢ C語言中的正碼,反碼,和補碼作何解釋(名詞解釋)
補碼,是在計算機內部,正負數的存放格式。
在計算機內部,並沒有「正碼」、「反碼」。
C 語言是高級語言。
用高級語言編程,是不用關心計算機內部的事的。
如果非要涉及計算機內部的細節,那就不是高級語言了。
很多教材書籍的作者,都沒有弄明白:什麼是高級語言。
計算機內部的碼,有很多種了,要是討論起來,C 語言就學不完了。
㈣ c語言 關於有符號、無符號和補碼、原碼
在C語言中:只有十進制數有符號,八進制和十六進制沒有的,一個數的原碼是其二進制數,補碼是對原碼取反後再加上1,
比如: 5則原碼是 101,則反碼是010,補碼=010+1=011
㈤ C語言補碼作用
用16bit表示,三個碼分別是:原碼、反碼、補碼
-0:
1000
0000
0000
0000、1111
1111
1111
1111、0000
0000
0000
0000
-6875:
1001
1010
1101
1011、1110
0101
0010
0100、1110
0101
0010
0101
-11:
1000
0000
0000
1011、1111
1111
1111
0100、1111
1111
1111
0101
如果是8位,:原碼、反碼、補碼分別為:
-0:
1000
0000、1111
1111、0000
0000
-11:
1000
1011、1111
0100、1111
0101
6875
無法表示,因為8位的最大表大范圍是-128
~
127
正數:原碼=補碼
負數:
原碼
=
正數部分(去掉負號)的二進制值,且符號位(最左邊的比特位)為1
反碼
=
正數部分(去掉負號)的二進制值,按位取反
補碼
=
反碼
+
1
㈥ C語言中,原碼,補碼和反碼怎麼換算
數在計算機中是以二進制形式表示的。
數分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,0是正,1是副。
以下都以8位整數為例,
原碼就是這個數本身的二進制形式。
例如
1000001
就是-1
0000001
就是+1
正數的反碼和補碼都是和原碼相同。
負數的反碼是將其原碼除符號位之外的各位求反
[-3]反=[10000011]反=11111100
負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。
[-3]補=[10000011]補=11111101
一個數和它的補碼是可逆的。
為什麼要設立補碼呢?
第一是為了能讓計算機執行減法:
[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)
[10000000]補
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
有人會問
10000000這個補碼表示的哪個數的補碼呢?
其實這是一個規定,這個數表示的是-128
所以n位補碼能表示的范圍是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數多一個
㈦ C語言中運算輸出是以原碼形式還是補碼形式
在C語言中,有符號整型數的存儲、運算的過程,都是採用補碼形式的。無符號整型數的存儲、運算的過程,也都是採用補碼形式的(只是沒有符號位而已)。
㈧ c語言:原碼,反碼 補碼
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
機器數的補碼可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,並在未位加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.
已知[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"就得到補碼了,就是這么簡單。
㈨ C語言求原碼的補碼問題
必須要用無符號數,位運算的規定就是如此,你想,如果有符號是負數,用哪個來位運算,結果呢
進行與運算是判斷該數是否最大的負數,注意補碼的數值范圍,負數比正數多一個,該數為最小負數,表示範圍內沒有對應的正數