我正在查看 Google Code Jam 中的一些解决方案,有些人使用了我以前从未见过的东西。例如,
2LL*r+1LL
2LL和1LL是什么意思?
它们的定义如下:
#include <math.h>
#include <algorithm>
#define _USE_MATH_DEFINES
或者#include <cmath>
我正在查看 Google Code Jam 中的一些解决方案,有些人使用了我以前从未见过的东西。例如,
2LL*r+1LL
2LL和1LL是什么意思?
它们的定义如下:
#include <math.h>
#include <algorithm>
#define _USE_MATH_DEFINES
或者#include <cmath>
LL
会使整数字面量成为long long
类型。
所以2LL
是一个long long
类型的2。
如果没有LL
,这个字面量只会是int
类型。
当你做如下操作时,这就很重要了:
1 << 40
1LL << 40
只使用字面值1
时(假设int
为32位),如果您进行移位操作超出了整数类型的大小,则会出现未定义行为。
当使用1LL
时,您事先将类型设置为long long
,现在它将正确返回2^40。
long long
已经被加入到最新的C++标准中。也就是说,无论您使用大写的L
还是小写的l
都没有关系。此外,还有u
或U
可以与它们结合使用表示unsigned
。 - Ulrich Eckhardtlong long
是 C++11 中官方的类型,至少具有64位。 - chris