printf没有打印正确的值

chi*_*lia 3 c c++ printf

我写了一个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,但我无法理解为什么后来的值被破坏了.

提前致谢

Mys*_*ial 7

%llu需要一个64位整数.但是你只给它一个32位整数.

结果是printf正在读取的内容相对于你传递的内容被"移位"了32位.因此,您的"1"未在正确的位置读取.

编辑:

现在解释一下输出:

a1因为它们都是32位整数而被存储32位.但是,printf期望第一个参数是64位整数.因此,它把它读成a + 2^32 * 1这是4294967296你的情况.打印的第二个值是未定义的,因为它已经过了1.