當前位置:首頁 » 編程語言 » c語言求反碼
擴展閱讀
galgame漢化硬碟版 2022-07-07 22:39:15
m2緩存檔用多大的群暉 2022-07-07 22:30:57

c語言求反碼

發布時間: 2022-05-24 15:23:41

c語言中,原碼補碼反碼都必須是二進制嗎

不需要,求補碼是一種運算,參與運算的數值是整數就可以,不需要是二進制。但是計算機在內部處理的時候是轉換成二進制進行處理的。C語言可以計算15的反碼為-16,這個按照反碼的定義是對的。代碼如下:
#include <stdio.h>
int main(void) {
int a,b;
a = 15;
b = ~a;
printf("b=%d\n",b);
return 0;
}

Ⅱ C語言中,什麼是補碼、源碼、反碼分別怎樣計算

一、原碼

求原碼:X≥0,則符號位為0,其餘照抄;
X≤0,則符號位為1,其餘照抄。
【例1】X=+1001001 [X]原 = 01001001
【例2】X=-1001001 [X]原 = 11001001

二、反碼
求反碼:若X≥0,符號位為0,其餘照抄;
若X≤0,符號位為1,其餘按位取反。
【例3】X=+1001001 [X]反 = 01001001
【例4】X=-1001001 [X]反 = 10110110

三、補碼
求補碼:若X≥0,符號位為0,其餘照抄;
若X≤0,符號位為1,其餘取反後,最低位加1。
【例5】X=+1001001 [X]補 = 01001001
【例6】X=-1001001 [X]補 = 10110111

Ⅲ 用C語言編一個程序,使給出一個數的原碼,求得反碼,補碼。

#include<stdio.h>

int main(){
int i,j,k;
int a[16], af[16], ab[16];//af存儲反碼,ab存儲補碼第0位為符號位
char b[16];
scanf("%s", b);
for(i = 0; b[i] != '\0'; i++){
a[i] = b[i] - '0';
}
j = i-1;
ab[0] = af[0] = a[0];//符號位始終不變

if(a[0] == 1){//當從屏幕輸入的是負數,則作相應變換
for(i = j; i > 0; i--){
af[i] = 1 - a[i];
ab[i] = a[i];
if(a[i] == 1){
i--;
break;
}
}
k = i;
for(; i > 0; i--)
af[i] = 1 - a[i];
for(i = k; i > 0; i--)//補碼從末位數起第一個不為0,以後均取反
ab[i] = 1 - a[i];
}
else{//如果是正數,則全部復制
for(i = j; i > 0; i--){//正數反碼、補碼都與原碼相同
af[i] = a[i];
ab[i] = a[i];
}
}
printf("對應的反碼是:\n");
for(i = 0; i <= j; i++)
printf("%d", af[i]);
printf("\n");
printf("對應的補碼是:\n");
for(i = 0; i <= j; i++)
printf("%d", ab[i]);
}

在vc下編譯測試通過。另,本代碼未考慮輸入非法問題,所輸入的數字智能由1和0組成

Ⅳ c語言數據類型 反碼的計算題。

當加法的時候,並不是反碼加, 而是補碼加.
反碼只是中間值.
所以
-3補=11111101
-4補=11111100
相加=11111001
這個就是結果的補碼
其反碼 10000110
原碼 10000111
十進制值為-7

Ⅳ c語言裡面,反碼誰發明的

當然是c語言的專家了。
所謂原碼就是二進制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
原碼10010= 反碼11101 (10010,1為符號碼,故為負)
(11101) 二進制= -2 十進制
補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
提示信息不要太少,可「某某數的反碼是某某」,而不是只顯示數值。
1.原碼的求法:(1)對於正數,轉化為二進制數,在最前面添加一符號位(這是規定的),用1表示負數,0表示正數.如:0000 0000是一個位元組,其中左邊第一個0為符號位,表示是正數,其它七位表示二進制的值.其實,機器不管這些,什麼符號位還是值,機器統統看作是值來計算. 正數的原碼、反碼、補碼是同一個數!
(2)對於負數,轉化為二進制數,前面符號位為1.表示是負數.
計算原碼只要在轉化的二進制數前面加上相應的符號位就行了.
2.反碼的求法:對於負數,將原碼各位取反,符號位不變.
3.補碼的求法:對於負數,將反碼加上二進制的1即可,也就是反碼在最後一位上加上1就是補碼了.

Ⅵ 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、數在計算機中是以二進制形式表示的。

2、數分為有符號數和無符號數,原碼、反碼、補碼都是有符號定點數的表示方法。

3、一個有符號定點數的最高位為符號位,0是正,1是副;【原碼】就是這個數本身的二進制形式。

4、正數的【反碼】和補碼都是和原碼相同;負數的【反碼】是將其原碼除符號位之外的個位求反。

拓展資料

1、C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

2、盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

Ⅷ 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,當負數變成倒數和補碼時符號位是一樣的,所以它是1。

1.首先,我們需要知道轉換規則:原碼轉換為逆碼:符號位不變,數字位逐位倒轉。

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

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

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