10

LL在标准中的任何地方都有定义(很难找到)?

ideone接受代码

int main()
{
    std::cout << sizeof(0LL) << std::endl;
    std::cout << sizeof(0);
}

并打印

8
4

但是这是什么意思?

4

4 回答 4

9

它在 C++11 标准的第 2.14.2 段中指定:

2.14.2 整数文字

[...]

long-long-suffix:其中之一

ll LL

第 2.14.2/2 段,特别是表 6,继续指定十进制、八进制和十六进制常量的后缀的含义,以及它们给出的类型。

因为0是八进制文字,所以类型0LLlong long int

#include <type_traits>

int main()
{
    // Won't fire
    static_assert(std::is_same<decltype(0LL), long long int>::value, "Ouch!");
}
于 2013-03-22T16:18:25.227 回答
4

LL是 long-long 的后缀,在大多数(全部?)C/C++ 实现中是 64 位的。0LL值为 0 的 64 位文字也是如此。

这类似于L作为 long 文字的后缀,在大多数 32 位和 64 位 C/C++ 实现中,它的大小与 non-long 相同int。(在 16 位实现中, 的大小int通常为 16 位,因此L后缀将指示 32 位整数文字,而不是默认的 16 位。)

于 2013-03-22T16:16:53.027 回答
4

0LL是一个整数文字。它的后缀LL决定了它可能具有的可能类型集。对于十进制常量,类型将为long long int. 对于八进制或十六进制常量,类型将是long long intorunsigned 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
...
于 2013-03-22T16:18:35.137 回答
0

我们将从一个例子开始:

std::cout << 2LL << endl;

这个结果将是 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。

于 2021-07-30T15:40:02.743 回答