⑴ 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語言補碼問題
int 型數據在內存中通常佔2個位元組,-1 用二進製表示為:
11111111 11111111,
轉換成16進制,要把二進制數從低位起,每4位分成一組,再換算為相應的16進制數,即 1111 1111 1111 1111 ==> ff ff
轉成 8進制,則把二進制數從低位起,每3位分成一組,再換算為相應的 8進制數,即 1 111 111 111 111 111 ==> 177777
⑶ C語言求原碼的補碼問題
必須要用無符號數,位運算的規定就是如此,你想,如果有符號是負數,用哪個來位運算,結果呢
進行與運算是判斷該數是否最大的負數,注意補碼的數值范圍,負數比正數多一個,該數為最小負數,表示範圍內沒有對應的正數
⑷ c語言中二進制補碼問題
32767=2的15次方-1 = 01111111 11111111 你怎麼得來的「原碼是1100000000001001」??
原碼:人為規定的一種數據概念,最高位為符號位,其餘位為數值位,實際應用中不用
反碼:也是人為規定的數據概念,正數原碼即是反碼,負數反碼:符號位不動,數值位按位取反,實際應用中不用
補碼:計算機中實際存儲數據的格式,真正的數據應用。
正數的原碼即是補碼
負數的補碼是反碼+1
⑸ 關於C語言的補碼
8bit(位)是一個Byte(位元組).
2Byte(位元組)是一個Word(字),16bit.
2Word(字)是一個DW(雙字),32bit.
---------------------------------
二進制的每一個都有自己的權值。對於一個位元組來講,從左至右分別為128、64、32、16、8、4、2、1(發現規律了吧——乘2)
因為19=16+2+1,所以從右至左,第0位為1,第1位為1,第4位為1。
就得到了10011b
所以,如果用8位表示19當然就是00010011b
用16位表示就是0000000000010011b
用32位表示就是
--------------------------------------------------
至於你說的補碼的問題,是因為在計算機中,為了存貯負數(要與正數和0分開,不能重碼)而做的人為規定。
總之,你記住,計算機里存貯數都是用補碼的形式。正數和0的補碼永遠都是自己,負數的補碼就是它的絕對值按位取反,加1。
[0]補=00000000b
[1]補=00000001b
[2]補=00000010b
[3]補=00000011b
----------------
[-0]補=00000000b
[-1]補=11111111b(註:-1的絕對值為1,按位取反後為11111110b,加1就得到了-1的補碼:11111111b)
[-2]補=11111110b
[-3]補=11111101b
⑹ 在C語言中補碼什麼意思
補碼主要是為了cpu運算器在進行減法運算時避免借位而設立的。
在早期,cpu中的運算器部分,只要實現一個加法器就可以完成四由算術運算。
因為計算機中的數值編碼是有限位數的,所以減法實際上相當於加上減數的補碼,而乘法是循環的加法,除法是循環的減法。這種思想在數學上叫轉化思想,在兵法上與」借刀殺人「、」借屍還魂「的借是「異曲同工」,用牛頓的話叫做「站在巨人的肩上「。
舉例說明,以8位的二進制為例,要計算1-1,只要用1加上-1的補碼即可。
-1的原碼:1000 0001,最高位是符號為,1表示負數,0表示正數。
-1的反碼:1111 1110, 按位取反是除符號位以外,其它每個位上的0變成1,1變成0。
-1的補碼:1111 1111,在反碼的基礎上是加上1即為補碼。
1-1 = 1+ 1111 1111 = 1 0000 0000 ,因為只有8位的二進製表示方法,此時溢出了,溢出位在硬體上是沒法表示的,因此結果還是0.
⑺ C語言的補碼!!
如果正整數補碼還是 0000 0000 0000 0111 和原碼一樣啊但是-7,就是你那樣算啊
⑻ C語言的補碼是怎樣求出來的
正數是取原碼,負數是對應正數逐位取反再加一
比如19,原碼用8位二進制是00010011,那麼它的補碼、反碼都是00010011。
而對於-19,因為19的8 位原碼是00010011,逐位取反得
11101100,再加1,11101101
所以-19的原碼是10010011,反碼是11101100,補碼是11101101
⑼ c語言中補碼怎麼算的
首先建議樓主去惡補一下「原碼」、「反碼」以及「補碼」的相關知識。
以下我就先來分析一下(假設你已經了解了這些知識):
首先我們以無符號的視點來看待題目中的數據:
n = 0x7FFF
m = 0x8000
可知對於n來說,他的二進制模式為:0111 1111 1111 1111
對於m來說,他的二進制模式為: 1000 0000 0000 0000
可以看到,最高位符號位n為0,而m為1
所以用帶符號數的視角來看待m、n的這串二進制數據,我們知道n符號位(最高位)為零,所以n是正數,而m符號位為1,因而是負數。
對於補碼,正數好計算,就是他的值,也就是0111 1111 1111 1111 = 0x7FFF = 32767
對於負數m,為了知道他的值我們可以這么干:
假設m的絕對值|m| = x,則我們對m就可以得到x
m = 1000 0000 0000 0000
取反:
~m = 0111 1111 1111 1111
加1
~m + 1 = 1000 0000 0000 0000
(這道題數據比較特殊,所以你看到m和~m+1結果貌似一樣,事實上你可以列舉其他值算算,一般這兩個位模式是不同的)
可知x = 32768
則可知m = -x = -32768
以上
⑽ c語言中原碼,補碼分別是什麼意思
原碼就是原來數字的二進制的表示 比如 15= 1110 這個是15的原碼 他的補碼就是0001