佐助开写轮眼是第几集:C语言中的-1和2^32-1二进制难道相同?

来源:百度文库 编辑:高校问答 时间:2024/04/29 03:38:26
我的VC++的int是32位的。
这里unsigned int a =0xFFFFFFFF
此时内存中应该是11111……,很多1
为什么输出成%d形式却变成了-1
难道不是-2^32-1吗?
#include <stdio.h>
int main()
{
unsigned int a=0xffffffff;
int b=-2;
printf("%d %u %x %o\n",a,a,a,a);
printf("%d %u %x %o\n",b,b,b,b);
return 0;
}
我认为
-1 应该是100...001 中间为0
而2^32-1 是1111...111 全1
不是吗?

因为 int 这 32 位中,最高位是符号位,其它 31 位表示数值。计算机中的数值本来就是这样存放的,你必须指定它的数据类型,否则,你可以说它是 2^32 -1,也可以说它是 -1。

针对你的题目,我这么回答希望你能理解:int 型的 -1 和 unsigned int 型的 2^32-1 的二进制是相同的。

在计算机中,
有符号数= 其绝对值的补数 = 绝对值 取反 +1
-1 = ~1+1 =111111111111110+1 =111111111111111

建议楼主去看一下补码的知识

int类型是有符号的,32位中的第一位是符号位0为正1为负,其余的是数值位
-1在内存中就是31个1
unsigned类型是无符号的,32位全是数值位,所以32个1才是2^32-1

因为 int 这 32 位中,最高位是符号位,其它 31 位表示数值。计算机中的数值本来就是这样存放的,你必须指定它的数据类型,否则,你可以说它是 2^32 -1,也可以说它是 -1。

针对你的题目,我这么回答希望你能理解:int 型的 -1 和 unsigned int 型的 2^32-1 的二进制是相同的。