在C和C++中,1LL或2LL是什么?

70

我正在查看 Google Code Jam 中的一些解决方案,有些人使用了我以前从未见过的东西。例如,

2LL*r+1LL

2LL和1LL是什么意思?

它们的定义如下:

#include <math.h>
#include <algorithm>
#define _USE_MATH_DEFINES
或者
#include <cmath>
1个回答

127

LL会使整数字面量成为long long类型。

所以2LL是一个long long类型的2。

如果没有LL,这个字面量只会是int类型。

当你做如下操作时,这就很重要了:

1   << 40
1LL << 40

只使用字面值1时(假设int为32位),如果您进行移位操作超出了整数类型的大小,则会出现未定义行为。 当使用1LL时,您事先将类型设置为long long,现在它将正确返回2^40。


1
据我所知,long long已经被加入到最新的C++标准中。也就是说,无论您使用大写的L还是小写的l都没有关系。此外,还有uU可以与它们结合使用表示unsigned - Ulrich Eckhardt
3
@doomster,你是正确的。long long 是 C++11 中官方的类型,至少具有64位。 - chris
7
@doomster:好的,这对于人类的可读性很重要:“11LL”比“11ll”更易于阅读。 - Keith Thompson
如何在Ruby中写0LL? - user1735921
在 Ruby 中的等价物可能是显式创建一个 Bignum,而不是使用整数字面量(如果足够小,则会给您一个 Fixnum,否则为 Bignum)。 - Sean Burton
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接