Я задаю новый ответ, потому что признаю, что текущие ответы не приводятся из источника с кросс-платформой. Стандарт C ++ 11 диктует, что литерал с суффиксами U
/ u
и LL
/ ll
является литералом типа: unsigned long long int
[ source ]
U
/ u
- суффикс C / C ++ для целых чисел без знака. LL
/ ll
- суффикс C / C ++ для целого числа long long
, который является новым типом в 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 суффиксы принимаются в любом порядке, поэтому теперь это легальный unsigned long long int
литерал 13LLU
.