當前位置:首頁 » 編程語言 » 補碼轉原碼c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

補碼轉原碼c語言

發布時間: 2022-05-28 23:51:18

『壹』 c語言求原碼的補碼問題

必須要用無符號數,位運算的規定就是如此,你想,如果有符號是負數,用哪個來位運算,結果呢
進行與運算是判斷該數是否最大的負數,注意補碼的數值范圍,負數比正數多一個,該數為最小負數,表示範圍內沒有對應的正數

『貳』 計算機c語言中 什麼是補碼,反碼,如何轉換

所謂反碼就是1變0,0變1
補碼表示正數時就是其本身,表示負數時是絕對值碼取反後加1
比如:
十進制+10,表示成二進制數據是00001010,這也是十進制+10的補碼

十進制-10,表示成二進制:
先求出十進制10的二進製表示00001010
求反:11110101
加1: 11110110 這就是補碼表示的十進制-10

『叄』 1111111111110100在C語言怎麼把補碼轉換成真值

這要看你算不算符號位。

正常情況下最高位是符號位,所以最高位不變,其餘位數的二進制數-1(111111111110100-1=111111111110011)再取反,即000000000001100。

算上最高位符號位1,原碼就是1000000000001100,對應10進制就是-12。

『肆』 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語言中一個數補碼和原碼是如何進行計算的

一個簡單的方式求補碼那就是從原碼的最右端開始找到第一個不為零的數(就是1)從下一個開始取反
如1001
1100的補碼就是0110
0100,至於原碼用10進制數依次除以2安順序保留余數,知道商為零為止,那麼最後依次的余數就是原碼的最高位,倒數第2個余數就是原碼的次高為,這樣依次,知道第一個余數就是原碼的最低位了

『陸』 二進制原碼補碼轉換c語言源代碼

輸入任意整數,輸出32位的補碼。
輸入其他,結束程序。
#include

int
main()
{
int
i,num=0;
char
s[33]={0};
while(1==scanf("%d",&num)){
for(i=0;i<32;i++){
s[i]=
(0x01
&
(num>>(31-i)))
?
'1'
:
'0'
;
}
printf("%s\n",s);
}
return
0;
}

『柒』 C語言原碼補碼問題

你的這個是16的,我可以給你用8位解釋一下(原理是一樣的,我打起來比較方便~)

我們知道,8位二進制的補碼表示範圍是-128~127對吧。

而在計算機中數據都是以二進制補碼進行存儲的,那麼-128的存儲方式就是1000 0000,而它是沒有原碼和反碼的,所以你不太能驗證,對吧。

這是因為在計算機中,為了溢出特意定義的一個小玩意兒~

所以放到16來解釋,它的最小值也是-32768。

但這已經是最小的數了,再減就會溢出……(理論上是這樣的)

但是現實中的程序編譯有一定的容錯性,只要到了一定的計算機承認的位數就變成-1了。

這是因為計算機中的數好像一個輪回……

(我的計算機是32位的~)


經過實踐驗證了我說的東西……


如果你的程序要求指定了16位,那麼就是-1,如果高於16位,就是 -32769。

『捌』 C語言原碼補碼按位運算問題!

int類型一般是16位,比如1就是0000 0000 0000 0001,其中有符號數第一位是符號位,正是0,負是1;
-20轉換為二進制按規則應該是 1000 0000 0001 0100;這個就是原碼,但是計算機中不是這么存儲的;
然後將符號位以外的這15位取反,得到,1111 1111 1110 1011;這個叫反碼
之後再加上1,得到,1111 1111 1110 1100;這個是補碼(計算機中存儲的-20)
從一個二進制數反推回十進制,按相反的順序計算即可.

位運算>>,就是向右位移一定位數,正數補0,負數補1;
所以-20>>3就是111 1111 1111 1110 1(左邊補出3個1,右邊的100丟失)
得到1111 1111 1111 1101,這個是補碼,(計算機中的數)
減1得1111 1111 1111 1100,這個是反碼;
取反得1000 0000 0000 0011,這個是原碼;(方便我們識別的數)
也就是十進制的-3.