『壹』 c语言中原码,反码,补码是怎么算的啊

补码=反码+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语言中补码和反码是什么意思,求例子,谢谢

数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,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语言编一个程序,使给出一个数的原码,求得反码,补码。

#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语言里面,反码谁发明的

当然是c语言的专家了。
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010= 反码11101 (10010,1为符号码,故为负)
(11101) 二进制= -2 十进制
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
提示信息不要太少,可“某某数的反码是某某”,而不是只显示数值。
1.原码的求法:(1)对于正数,转化为二进制数,在最前面添加一符号位(这是规定的),用1表示负数,0表示正数.如:0000 0000是一个字节,其中左边第一个0为符号位,表示是正数,其它七位表示二进制的值.其实,机器不管这些,什么符号位还是值,机器统统看作是值来计算. 正数的原码、反码、补码是同一个数!
(2)对于负数,转化为二进制数,前面符号位为1.表示是负数.
计算原码只要在转化的二进制数前面加上相应的符号位就行了.
2.反码的求法:对于负数,将原码各位取反,符号位不变.
3.补码的求法:对于负数,将反码加上二进制的1即可,也就是反码在最后一位上加上1就是补码了.

『陆』 c语言中的原码,反码,补码有什么作用,是用来做什么的

计算机中的整数类都是用补码来存储的。
而C语言中不需要关心原反补码!