我正在使用Linux x86_64和gcc 5.2.1并且我正在使用代码来确定" unsigned long long"的最大值。 C编程语言中的变量。
在我的机器中," 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: 警告:整数常量太大,以至于无符号无符号 long long a = 18446744073709551615;
我的问题是,为什么要发出警告。该值在该范围的外围。而且,它已被明确声明为无符号。
答案 0 :(得分:1)
您的代码是正确的,这是一个虚假的警告。
为了避免警告你可以写:
unsigned long long a = 18446744073709551615ull;
警告对某些整数文字(稍微)有用,但不是特定的,并且编译器并没有非常努力地将警告限制在有用的情况下。
NB。确保您使用的是-std=c99
或-gnu99
或更高版本;在1999年之前,C没有正式拥有unsigned long long
,并且不同的编译器使用大整数文字做了奇怪的事情。