我写了一个C的小代码.
#include<stdio.h>
int main()
{
int a = 0;
printf("Hello World %llu is here %d\n",a, 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它正在打印以下输出
Hello World 4294967296在这里-1216225312
编译时出现以下警告
prog.cpp:在函数'int main()'中:
prog.cpp:5:警告:格式'%llu'期望类型'long long unsigned int',但参数2的类型为'int'
我知道我需要将int转换为long long unsigned int,但我无法理解为什么后来的值被破坏了.
提前致谢
%llu需要一个64位整数.但是你只给它一个32位整数.
结果是printf正在读取的内容相对于你传递的内容被"移位"了32位.因此,您的"1"未在正确的位置读取.
编辑:
现在解释一下输出:
a1因为它们都是32位整数而被存储32位.但是,printf期望第一个参数是64位整数.因此,它把它读成a + 2^32 * 1这是4294967296你的情况.打印的第二个值是未定义的,因为它已经过了1.