我遇到过这样的一些代码:
line += addr & 0x3fULL;
显然,“ U”和“ L”不是十六进制数字。我猜测十六进制数字文字末尾的“ ULL”表示“ Unsigned Long Long”-我正确吗?(这种事情很难用谷歌搜索)如果是的话,那么这是数字上的某种后缀修饰符吗?
我遇到过这样的一些代码:
line += addr & 0x3fULL;
显然,“ U”和“ L”不是十六进制数字。我猜测十六进制数字文字末尾的“ ULL”表示“ Unsigned Long Long”-我正确吗?(这种事情很难用谷歌搜索)如果是的话,那么这是数字上的某种后缀修饰符吗?
Answers:
对,那是正确的。
0x
前缀使它成为十六进制文字。ULL
后缀使其输入unsigned long long
。long long x = 0xfffffffffffful;
在Windows上进行了测试,并且不会截断-也没有警告。
int
。但是任何文字都有支持它的类型,如果有的话……
我提出了一个新的答案,因为我认识到当前的答案并非来自跨平台来源。的C ++ 11标准规定文字与U
/u
和LL
/ll
后缀是一种类型的文字:unsigned long long int
[源]
U
/u
是无符号整数的C / C ++后缀。
LL
/ll
是long long
整数的C / C ++后缀,它是C ++ 11中的新类型,并且必须具有至少64位的长度。
笔记:
int
,如果使用任何修饰符,则可以省略关键字unsigned long long
。因此,这将定义one
为unsigned long long int
,并分配给它的任何数量将static_cast
到unsigned long long int
:unsigned long long one = 1
auto
。它将变量类型设置为声明时分配给它的类型。例如,因为2ULL
是unsigned long long int
文字two
将被定义为unsigned long long int
:auto two = 2ULL
U
/u
后缀必须在任何大小的后缀之前。但是大约的c + + 14后缀以任意顺序接受,因此,因为3LLU
是,unsigned long long int
立即数three
将被定义为unsigned long long int
:auto three = 3LLU
13LUL
吗?
lL
和Ll
不允许),并且LL
和U
被分别指定,所以可以有任何的ull
,uLL
,Ull
,ULL
,llu
,llU
,LLu
,LLU
。