Jac*_*son 1 c visual-studio-2017
(4294967296 = 2 ^ 32)
我想4294967296使用printf(“%u,%d”)进行打印,并想知道会发生什么,但是得到一些奇怪的结果。
代码如下:
printf("%d\n", 4294967296);
printf("d = %u = %d = 0x%x \n", 4294967296, 4294967296, 4294967296);//this is strange
printf("d = %u = %d = 0x%x \n", 4294967295 + 1, 4294967295 + 1, 4294967295 + 1);
Run Code Online (Sandbox Code Playgroud)
我的结果是
0
d = 0 = 1 = 0x0
d = 0 = 0 = 0x0
Run Code Online (Sandbox Code Playgroud)
您可以在第二行中看到4294967296的二进制表达式是0x0,但是当我打印4294967296使用“%d”时,它将显示1,这让我感到困惑。我期望1的输出为0。
如果受支持,则该值为4294967296a long long,因为它不适合unsigned int。
格式"%d"用于int(带符号的 int)。
值类型和格式说明符不匹配会导致未定义的行为。
该值4294967295 确实适合,unsigned int但随后您添加了1使其溢出。
32位无符号整数的范围是0至2³²-1(包括)。