Суффикс ULL на числовом литерале


я наткнулся на такой код:

line += addr & 0x3fULL;

очевидно, что 'U' и ' L ' не являются шестнадцатеричными цифрами. Я предполагаю, что' ULL ' в конце этого шестнадцатеричного числового литерала означает "Unsigned Long Long" - я прав? (такого рода вещи очень трудно google) если так, то это какой-то суффикс модификатор на число?

3 56

3 ответа:

С gccруководство:

ISO C99 поддерживает типы данных для целых чисел шириной не менее 64 бит, а в качестве расширения GCC поддерживает их в режиме C90 и в C++. Просто напишите long long int для целого числа со знаком, или unsigned long long int для целого числа без знака. Чтобы сделать целочисленную константу типа long long int добавить суффикс LL целое. Чтобы сделать целочисленную константу типа unsigned long long int добавить суффикс ULL целое.

Да, это правильно.

  • 0x префикс делает его литерал.
  • ULL суффикс делает его тип unsigned long long.

я ставлю новый ответ, потому что я признаю, что текущие ответы не цитируют из кросс-платформенного источника. стандарт C++11 диктует, что литерал с U/u и LL/ll суффиксы-это литерал типа: unsigned long long int [источник]

U/u суффикс C / C++ для целого числа без знака.
LL/ll суффикс C / C++ для A long long целое число, а новый тип в C++11 и должны иметь длину не менее 64-бит.

Примечания:

  1. ключевое слово int может быть опущен, если используются какие-либо модификаторы, unsigned long long например. Так что это будет определять one как unsigned long long int, и любое присвоенное ему число будет static_cast до unsigned long long int:unsigned long long one = 1;
  2. C++11 ознаменовал появление auto. Который устанавливает тип переменной в тип, назначенный ему при объявлении. Например, потому что 2ULL это unsigned long long int литерал two будет определен как unsigned long long int:auto two = 2ULL;
  3. C++14 ввел порядок независимых буквенных суффиксов. Ранее U/u суффикс должен был предшествовать суффиксу любого размера. Но около C++14 суффиксы принимаются в любом порядке, так что теперь это законно unsigned long long int литерал 13LLU.