当前位置:首页 » 编程语言 » 用c语言写输入补码输出补码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

用c语言写输入补码输出补码

发布时间: 2022-06-16 12:18:51

c语言求补码

发明
补码
的目的


硬件“加法器”来做减法运算。
换句话说,减一个数,就是加它的
补码。
正数的补码就是原数,就是自己。
负数的补码是它的反码加1。
反码,就是
符号位不变,其它位
是1的变0,是0的变1。
变完后,最低位
加1,成了补码。

㈡ C语言的补码是怎样求出来的

正数是取原码,负数是对应正数逐位取反再加一
比如19,原码用8位二进制是00010011,那么它的补码、反码都是00010011。
而对于-19,因为19的8 位原码是00010011,逐位取反得
11101100,再加1,11101101
所以-19的原码是10010011,反码是11101100,补码是11101101

㈢ 刚接触c语言 是说输入的时候 电脑当做补码 然后输出原码吗

“输入的时候 电脑当做补码 然后输出原码” 这样说是不正确的。

计算机存储整型数据都是采用补码来表示的。用补码
1.解决了+0,-0的问题,
2.所有的运算都可以采用加法来实现

我们在输入数据的时候,都是人现实生活中能理解的数:如,10进制数,计算机在存储的时候会自动转换成补码来存放和运算。 输出时,又会按人的要求,自动转换成相应的可识别的数据来显示。
short在32位以上的机器上占两个字节,是个有符号数,能表示的数据范围为:-32768~32767。你输入65535,走出它的表示范围,计算机中存储的是16个1,对于short类型,16个1表示的是-1,所以,你的输出是-1

㈣ c语言递归函数 输出十进制数的二进制的补码,怎么写

如果是正数,补码=原码,如果是负数,x = x + 1 + 0xffffffff,再对x求原码
scanf("%d", &x);
x = (x + 1 + 0xffffffff) % 0xffffffff;
//TODO...再对x求原码就行
//这里0xFFFFFFFF为int能表示的最大值,如果int占4个字节的话,一般都是4个字节

㈤ 求一个C语言程序使输入一个数能显示出计算出它的原码和补码并显示出来(在VC6.0上运行)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
void convert(int num);
void oppose(int n);
int a[16];
void main(void)
{
int num,jdz;
char ans;
while(1)
{
printf("请输入任意一个十进制整数: ");
scanf("%d",&num);
printf("\n");
printf("其绝对值为: ");
jdz=abs(num);
printf("%d\n\n",jdz);
printf("其原码为: \n");
convert(jdz);
printf("\n\n");
if(num>=0)
{
printf("其补码为: \n");
convert(jdz);
printf("\n\n");
}
else
{
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;
}
}
}

void convert(int num) /*定义转化为原码的函数*/
{
int i;
a[0]=num%2;
for(i=1;i<=15;i++)
{
a[i]=(num/2)%2;
num/=2;
}
for(i=15;i>=0;i--)
printf("%2d",a[i]);
}

void oppose(int n) /*定义转化为补码的函数*/
{
int i;
for(i=0;i<=15;i++)
{
switch(a[i])
{
case 1:a[i]=0;break;
case 0:a[i]=1;break;
}
}
for(i=0;i<=15;i++)
{
a[i]++;
if(a[i]>1) a[i]=0;
else break;
}
for(i=15;i>=0;i--)
printf("%2d",a[i]);
}

㈥ C语言程序题,任意输入一个整数,编一个程序,使其输出输出相应的原码、反码及补码.


代码资料:

#include "stdio.h"

#include "limits.h"

void myout(unsigned n){

unsigned k;

for(k=~INT_MAX;k>0;k>>=1)

printf("%d",n&k || 0);

}

int main(int argc,char *argv[]){

int n;

printf("Enter n(int)... n=");

if(scanf("%d",&n)!=1){

printf("Input error, exit... ");

return 0;

}

printf("%d: ",n);

printf("原码: ");

myout(n>=0 ? n : (~n+1)|~INT_MAX);

printf(" 反码: ");

myout(n>=0 ? n : ~(-n));

printf(" 补码: ");

myout(n);

putchar(' ');

return 0;

}

㈦ 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<<" ";
}

㈧ 怎样用C语言编写一个实现求任意整数X的补码

k<,y[k]);n".h> if ((j+1)%8;;);k++) { f[k]=y[k];for(k=j;);stdio; b[k]=y[k];2,k;}else w=0; y[j]=0,n; for( k=0:"i;else f[k]=1; if ((j+1)%8; m=abs(n):"k>请输入一个整数!=0) for(;k--)printf(" for(k=0; for(k=0;y[j]=1,j:":"=0) { for(j=0;);printf("!=0;j++) y[j]=0; i=i+1;j++) y[j]=a[j];反码!=0) { a[i]=m%2;\ for(j=0;),a[10];j;%d"}b[k]=1;(j+1)%8;j++) y[j]=a[j];=0;n";j;(j+1)%8;for(k=j;);printf(" } printf("else b[k]=f[k]+w,f[k]);#include<k++) if(y[k]) f[k]=0; scanf(",y[100]; m=m/math!=0) for(; } if (n>for(k=j,b[k]);k--)printf("f[k]=1;if (b[k]==2){b[k]=0;%d";w=1;i; printf(",b[100]; printf("原码;k<=j;k>\ printf("=0;printf(").h>j<补码;=0,n),i=0;k<k--)printf("void main(){ int m;)!=0;,f[100];k>j++) y[j]=0;%d"%d"n" while (m#include<j<\k++) {if (k==0)b[k]=f[k]+1; } } else { int w=0