2025-03-28 01:00:33
2025-03-28 02:34:42
谢谢!我完全懂了。你说的基本正确,答案也对,但前提是在VC环境下进行,因为VC占四个字节32位,但在BC的情况则不对!而且“unsigned int a=-2;这句会强制把负数,转换成正数”,这个话有点问题,是不是理解成在“unsigned int a=-2"的下,系统会把最高位符号位1当成数据位看待,而不是强制转换为正数呢??
另一位网友也答对了,不过他是答了BC情况下的答案。呵呵
恩,大多数unsigned int和int都是4个字节的
是的,你理解的很到位~
2025-03-28 00:05:16
2025-03-28 01:16:37
输出结果为65534或者4294967294
因为在不同位的操作系统下,数值的表示位数是不一样的。首先我们先明确一点:在计算机中,正数用原码来计算(正数的原码、补码、反码都是一样的);负数是用补码来计算的。至于原因可以参考一下文章
首先在16位系统中,-2的原码为1000 0000 0000 0010;补码为:1111 1111 1111 1110;我们使用的unsigned为无符号数,那么此时计算机会把我们的-2强制转化为正数进行运算,即用1111 1111 1111 1110表示-2,即为65534.
在32位操作系统中,-2的原码为:1000 0000 0000 0000 0000 0000 0000 0010;补码为:1111 1111 1111 1111 1111 1111 1111 1110;同上述,计算机会强制输出1111 1111 1111 1111 1111 1111 1111 1110所代表的十进制数,即4294967294。
可以参考一下例子:
#include <stdio.h>
#include<windows.h>
void main()
{
unsigned int a=65535;
int b=4294967294;
printf("%d %u\n",a,a);
printf("%d %u\n",b,b);
system("pause");
}
输出结果:
65535 65535
-2 4294967294
2025-03-28 00:55:34
谢谢!我完全懂了。你说的基本正确,答案也对,但前提是在BC环境下进行,因为BC占两个字节16位,但在VC的情况则不对!而
另一位网友也答对了,不过他是答了VC情况下的答案。呵呵