我遇到过这样的一些代码:
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 = 1auto。它将变量类型设置为声明时分配给它的类型。例如,因为2ULL是unsigned long long int文字two将被定义为unsigned long long int:auto two = 2ULLU/u后缀必须在任何大小的后缀之前。但是大约的c + + 14后缀以任意顺序接受,因此,因为3LLU是,unsigned long long int立即数three将被定义为unsigned long long int:auto three = 3LLU13LUL吗?
lL和Ll不允许),并且LL和U被分别指定,所以可以有任何的ull,uLL,Ull,ULL,llu,llU,LLu,LLU。