2015-12-03 147 views
0

我使用Linux x86_64和gcc 5.2.1,并且正在使用代码来确定C编程语言中“unsigned long long”变量的最大值。在C中使用无符号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:在函数 '主':Ascertaining_Range.c:5:25: 警告:整数常数是如此之大,这是无符号无符号长 长= 18446744073709551615;

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

回答

1

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

为了避免该警告你可以写:

unsigned long long a = 18446744073709551615ull; 

的警告是对一些整数文字(略)是有用的,但不是这个特殊的一个,并且编译器不拼命的限制警告有用的案例。

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