在 C 中给出 unsigned long long 变量值的警告

Posted

技术标签:

【中文标题】在 C 中给出 unsigned long long 变量值的警告【英文标题】:Warning given a value of unsigned long long variable in C 【发布时间】:2015-12-03 02:46:32 【问题描述】:

我正在使用带有 gcc 5.2.1 的 Linux x86_64,并且我正在使用代码来确定 C 编程语言中“unsigned long long”变量的最大值。

在我的机器中,“unsigned long long”的大小是 8 个字节。做数学告诉我,范围应该是 0 到 (2 ** 64) - 1,即: 0到18446744073709551615。代码如下:

#include<stdio.h>

int main()

    unsigned long long a = 18446744073709551615;

    printf("a: %llu\n", a);

return 0;

当我编译它时,我得到以下输出:

Ascertaining_Range.c:在函数“main”中:Ascertaining_Range.c:5:25: 警告:整数常量太大以至于它是无符号的 长长a = 18446744073709551615;

我的问题是它为什么会发出警告。该值在范围的外围。而且,它已被明确声明为无符号。

【问题讨论】:

【参考方案1】:

您的代码是正确的,这是一个虚假的警告。

为了避免警告你可以写:

unsigned long long a = 18446744073709551615ull;

警告对于某些整数文字(但不是这个特定的文字)(略微)有用,并且编译器并没有非常努力地将警告限制在有用的情况下。

注意。确保您使用的是-std=c99-gnu99 或更高版本;在 1999 年之前,C 没有正式的 unsigned long long,不同的编译器对大整数文字做了一些奇怪的事情。

【讨论】:

以上是关于在 C 中给出 unsigned long long 变量值的警告的主要内容,如果未能解决你的问题,请参考以下文章

C++ unsigned long 在 4294967295 之后不会回绕

如何在 C 中打印“unsigned long”?

c语言里的无符号unsigned long ulZ = unsigned long dJDM,在java里怎么办?用long型没有c那么大的数值。

(C语言)unsigned long类型变量输出时,格式转换说明符应如何定义?

在 c语言中int long unsigned 和 char这四种类型数据的转换规律是_____.

Objective C 类方法`(unsigned long long)`