作者:阳_光shine | 来源:互联网 | 2022-12-19 13:50
unsigned long在我的Linux gcc上有8个字节.
unsigned long long在我的Linux gcc上也有8个字节.
所以我认为它们可以显示的整数范围是从0分钟到最大(2 ^ 64-1).
现在我想确认一下我是否正确.
这是我的代码:
#include
int main(void)
{
printf("long takes up %d bytes:\n", sizeof(long));
printf("long long takes up %d bytes:\n", sizeof(long long));
unsigned long a = 18446744073709551615;
a++;
printf("a + 1 = %lu\n", a);
unsigned long long b = 18446744073709551615;
b++;
printf("b + 1 = %llu\n", b);
return 0;
}
但是,代码无法编译,我收到以下警告:
warning: integer constant is so large that it is unsigned
我哪里做错了?我该如何修改代码?
1> msc..:
当初始化NUM,您可以附加"UL"对于unsigned long
和ULL的unsigned long long
.
例如:
unsigned long a = 18446744073709551615UL;
unsigned long long b = 18446744073709551615ULL;
另外,使用%zu
而不是%d
因为sizeof返回size_t
.
根据cppreference:
整数后缀(如果提供)可能包含以下一项或两项(如果提供了两者,则它们可以按任何顺序出现:
unsigned-suffix
(角色u
或角色U
)
long-suffix
(字符l
或字符L
)或long-long-suffix
(字符序列ll
或字符序列LL
)(自C99起)
C标准5.2.4.2.1整数类型的大小
:
1下面给出的值应替换为适用于#if预处理指令的常量表达式.此外,除了CHAR_BIT
和之外
MB_LEN_MAX
,以下内容应由与表达式相同的表达式替换,该表达式是根据整数提升转换的相应类型的对象.它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.