【发布时间】:2013-03-12 14:06:23
【问题描述】:
LL 是否在标准中的任何地方定义(很难找到)?
ideone接受验证码
int main()
{
std::cout << sizeof(0LL) << std::endl;
std::cout << sizeof(0);
}
和打印
8
4
但这是什么意思?
【问题讨论】:
LL 是否在标准中的任何地方定义(很难找到)?
ideone接受验证码
int main()
{
std::cout << sizeof(0LL) << std::endl;
std::cout << sizeof(0);
}
和打印
8
4
但这是什么意思?
【问题讨论】:
在 C++11 标准第 2.14.2 段中规定:
[...]
long-long-suffix:其中之一
ll LL
第 2.14.2/2 段,特别是表 6,继续指定十进制、八进制和十六进制常量的后缀的含义,以及它们的类型。
由于0 是八进制文字,所以0LL 的类型是long long int:
#include <type_traits>
int main()
{
// Won't fire
static_assert(std::is_same<decltype(0LL), long long int>::value, "Ouch!");
}
【讨论】:
LL 是 long-long 的后缀,在大多数(全部?)C/C++ 实现中是 64 位的。所以0LL 是一个 64 位的字面量,值为 0。
这类似于 L 作为长文字的后缀,在大多数 32 位和 64 位 C/C++ 实现中,它与非长文字 int 的大小相同。 (在 16 位实现中,int 的大小通常为 16 位,因此 L 后缀表示 32 位整数文字,而不是默认的 16 位。)
【讨论】:
0LL 是一个整数文字。它的后缀是LL,它决定了它可能具有的可能类型集。对于十进制常量,类型为long long int。对于八进制或十六进制常量,如有必要,类型将为long long int 或unsigned long long int。对于0LL,字面量的类型为long long int。
整数文字的类型是表 6 中可以表示其值的相应列表中的第一个。
表 6 - 整数常量的类型
Suffix Decimal constants Octal or hexadecimal constant ... ll or LL long long int long long int unsigned long long int ...
【讨论】:
long long int 但适合unsigned long long int 时。仅当它不适合 long long int 时才考虑。
我们将从一个例子开始:
std::cout
这个结果将是 2,并且会发生这种情况,因为根据数据大小,为了正确修复它,我们希望在某些情况下使用 2 一样长,而这正是发生的情况。给出的输出是 long long 类型,表示常量 int 2。
unsigned int:整数常量末尾的字符 u 或 U。
long int:整数常量末尾的字符 l 或 L。
unsigned long int:整数常量末尾的字符ul或UL。
long long int:整型常量末尾的字符ll或LL。 unsigned long long int:整数常量末尾的字符ull或ULL。
【讨论】: