真值为 -1000(十进制)的无符号数和机内二进制补码是一样的吗?
计算机中输入-1000时,是以补码的形式读到内容中的;
如果把它分别保存为无符号数和有符号数(机内二进制补码)时,它们在计算机中的内容是一样的,但是把存储的内容分别以无符号数和有符号数读出来时,内容就不一样了。
#include <stdio.h>
void prt1(unsigned int a) //打印32位无符号整数的二进制形式
{ unsigned int i;
for(i=31; i>0; i--)
{ printf("%d",(a&(1<<i))!=0);
if(i%8==0)printf(" ");
}
printf("%d\n",a&1);
}
void prt2(int a) //打印32位有符号整数(补码)的二进制形式
{ unsigned int i;
for(i=31; i>0; i--)
{ printf("%d",(a&(1<<i))!=0);
if(i%8==0)printf(" ");
}
printf("%d\n",a&1);
}
int main()
{ unsigned int a;
int b;
scanf("%u%d",&a,&b); //分别以无符号数和有符号整数的格式读入一个相同的数
//正常情况下,无符号数不能输入负数,否则就“溢出”了
printf("%u %d\n",a,b); //输出读到的无符号数和有符号整数
printf("a%c=b\n",a==b?'=':'!'); //以计算机内的标准判断这两个数有无区别
prt1(a); //打印32位无符号整数的二进制形式
prt2(b); //打印32位有符号整数(补码)的二进制形式
return 0;
}
2024-12-27 广告