c - C 中无法打印 long long 整数

标签 c printf long-long

我知道这个主题有很多主题,但没有一个可以帮助我解决我的问题。 我在 Code::Blocks 上工作(在“属性>项目构建选项>编译器设置>其他选项”中使用选项 -std=c99),并且以下代码没有给出预期的输出:

long long val=1<<33;
printf("value: %llu",val);

事实上,我在终端中获得了“值:0”。 我该如何解决这个问题?

当我写 30 而不是 33(因此 val 是一个整数)时,我得到了正确的答案。我也尝试过 %lld 但这没有帮助。

最佳答案

由于您尚未以任何方式限定文字 1 和 33,1<<33将有一个int作为其类型。如果int是 32 位(在针对 64 位的编译器上很常见),那么此表达式将产生未定义的行为

一个简单的解决方法是编写 1LL << 331LLlong long ,33也将晋升为该类型。 C++ 标准保证long long 至少 64 位。

虽然在很多方面我更喜欢static_cast<std::int64_t>(1) << 33 .

关于c - C 中无法打印 long long 整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29127854/

相关文章:

c - 如何在不破坏严格别名的情况下通过缓冲区传递此指针?

在 Linux 上将 CUDA 代码编译为静态库 (.a)

c++ - 如何在 C++ 中一点一点地循环 long long

c - 使用 float 而不是 double 时出现奇怪的输出

c - printf 在 C 中给我错误的输出

bash -/bin/bash printf 不适用于 C 以外的其他 LANG

C 编程书错误还是编程错误?

c - 如何使用 printf 格式化 unsigned long long int?

将字符串转换为 long long

c - 结构中的指针