-2147483648的补码怎么算?
在学《C程序设计》,练习编了个小程序计算int型数的补码。按书上的方法,负数先求绝对值,然后写成二进制,在各位取反后加1
我试了试,别的都行,最小数-2147483648算出来不对,貌似一取绝对值就已经溢出了吧?
怎么办?还用这种方法计算?还是这个数有别的计算方法?
程序代码:/*
时间:2011年9月30日15:41:07
目的:练习补码的计算方法
*/
# include <stdio.h>
int main()
{
int x;
int i;
int a[32];
printf("输入一个数\n");
scanf("%d",&x);
if (x>=0)
{
a[0]=0; //正整数计算补码
for(i=31; i>0; --i)
{
a[i]=x%2;
x /= 2;
}
}
else
{
x = -1*x; //取绝对值
a[0]=0; //按正整数计算补码
for(i=31; i>0; --i)
{
a[i]=x%2;
x /= 2;
}
for(i=0; i<32; ++i) //逐位取反
{
a[i] = !a[i];
}
for(i=31; i>=0; --i) //+1
{
if(0==a[i])
{
++a[i];
break;
}
else
{
--a[i];
continue;
}
}
}
printf("补码是:\n");
for(i=0; i<32; ++i)
{
printf("%d",a[i]);
if(3 == i%4)
{
printf(" ");
}
}
printf("\n");
return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入一个数
-2147483648
补码是:
0000 0000 0000 0000 0000 0000 0000 0000
Press any key to continue
————————————
*/









int型4个字节没法表示2147483648