C语言,输出补码

输入一个整数,输出补码。注意:关键是负数的补码!负数!整数补码不用问的,是个人就会。关键问题就是如何求反之后再加1 !
既然C语言中,整数用原码储存,负数用补码储存,求一个程序:输入一个整数,判断正负后输出原码和补码,输出格式要二进制的,位模式最好

求补码的函数可以参考下面的代码,我们知道,在内存中,正数的补码等于他本身,所以直接返回a。负数的补码正是它在内存中的存在形式,这是我们定义一个unsigned int型的数值去用它来赋值,取得的就是他的补码的二进制形式。为了验证,我另外编写了一个函数,用来输出二进制,请参考。

unsigned int buma(int a)//用来求得补码
{
if(a>=0)
return a;
else
{
unsigned int temp=a;
return temp;
}
}

void twoprint(unsigned int a)//用来输出二进制
{
int temp=a%2;
if(a/2==0)
{
cout<<a<<" ";return ;
}
twoprint(a/2);//这里采用了递归调用的方法
cout<<temp<<" ";
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2022-05-05

在计算机中,并无原码或反码。

输入的数值,无论正负,经过编译,都是以补码存放的。

编写 C 语言程序,显示数值的二进制,如下即可。

第2个回答  2020-07-02
7的二进制0000
0000
0000
0111,~是按位反,结果是 1111
1111
1111
1000
注意最高位是1,说明这是个负数,负数在计算机中是补码,补码是十进制多少呢,把补码负号不变,其它取反,最后加1,这个就是原码.即1000
0000
0000
0111+1
=1000
0000
0000
1000是-8 公式~n
结果是
-(n+1)
第3个回答  2009-12-27
位运算

C语言,输出补码
求补码的函数可以参考下面的代码,我们知道,在内存中,正数的补码等于他本身,所以直接返回a。负数的补码正是它在内存中的存在形式,这是我们定义一个unsigned int型的数值去用它来赋值,取得的就是他的补码的二进制形式。为了验证,我另外编写了一个函数,用来输出二进制,请参考。unsigned int buma(in...

C语言中运算输出是以原码形式还是补码形式?
在C语言中,有符号整型数的存储、运算的过程,都是采用补码形式的。无符号整型数的存储、运算的过程,也都是采用补码形式的(只是没有符号位而已)。

用C语言编一个程序,使给出一个数的原码,求得反码,补码。
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("对应的反码...

c编程怎样实现在输入一个数后将它的补码输出
假定是4字节有符号 int型,按16进制或2进制输出时,负数就是按补马输出。正数的补马就是原马。include<stdio.h> main(){ int x;char buffer [33];scanf("%d",&x); \/\/ 按10进制数进入,负数也好,正数也好 printf("hexadecimal:%#x\\n",x); \/\/ 16进 出来 itoa(x,buffer,2);pr...

c语言中补码怎么算的
C语言中,所有的整型数据实际存储的都是补码。要计算补码,先要知道原码的概念,原码也就是一个10进制数的二进制表达方式,比如100的原码为1100100。补码的计算原则为:1、 对于无符号数以及有符号数中的正数,其补码就是原码本身;2、 对于有符号数中的负数,其补码为真值绝对值的反码加一,其中反码为...

求数的补码 c语言中
简单的位运算就可以了 include <stdio.h> void printBin(int num){ int i,k=31;for(i=0;i<32;i++){ printf("%d",(num>>k)&1);\/\/移位并输出 k--;} printf("\\n");} int main(int argc, char* argv[]){ int num;printf("Please input a number, I will tell you what i...

C语言 -50的补码是如何求出来的,求过程,我算出来的不一样,负整数赋给...
i = -50; \/\/ 存入-50 的补码,即 65486 printf("%d". i); \/\/ 按照“带符号数”输出:-50。printf("%u". i); \/\/ 按照“无符号数”输出:65486。--- 在声明变量 i 时,可以是“带符号(int 型)”,也可以是“无符号”。C 语言系统,对不同类型的变量进行计算时,会有不...

c语言的-1输出的%u为什么是4294967295
答案:在C语言中,-1输出的%u是因为unsigned int类型能够表示的最大值是4294967295。详细解释:1. 了解unsigned int类型:在C语言中,`unsigned int`是一种整数类型,只能表示非负整数。它的大小取决于编译器和操作系统,一般为32位或64位。对于常见的32位系统,其能表示的最大值就是`4294967295`。2....

求一个C语言程序使输入一个数能显示出计算出它的原码和补码并显示出来...
printf("其补码为: \\n");oppose(a[16]);printf("\\n\\n");} printf("按回车键继续或按ESC键结束程序!!!\\n");ans=getch();while(ans!=13 && ans!=27){ ans=getch();} if(ans==13) system("cls");if(ans==27){ system("cls");printf("谢谢使用!!!\\n");break;} } } voi...

输入一个十进制数,用C语言输出其原码补码反码移码(十进制数可以为正负数...
void main(){ int m,n,a[10],i=0,y[100],f[100],b[100],j,k;printf("请输入一个整数:");scanf("%d",&n);m=abs(n);while (m!=0){ a[i]=m%2;m=m\/2;i=i+1;} if (n>=0){ for(j=0;j<i;j++) y[j]=a[j];if ((j+1)%8!=0) for(;(j+1)%8!=0;j...

相似回答