Подтвердить что ты не робот

Указание 64-разрядных целых литералов без знака в 64-битных моделях данных

Как существуют различные типы 64-битных моделей данных (LLP64/IL32P64, LP64/I32LP64, ILP64, SILP64), каков стандартный стандартный способ указания 64-битных целых литералов без знака?

Было бы достаточно указать суффикс ULL? Или я в конечном итоге заставляю литерал интерпретироваться как 128-бит на некоторых моделях данных?

4b9b3361

Ответ 1

Вы должны использовать <cstdint> / <stdint.h>, если он у вас есть. Это даст вам:

  • uint64_t - это целочисленный тип без знака, который имеет размер 64 бит
  • UINT64_C() - это макрос для создания констант типа uint64_t, когда макрос добавляет правильный суффикс.

Ответ 2

C и С++ не имеют стандартизованных типов переменных 32/64/128 бит. Например, длинные, например, на некоторых системах 32 бита и 64 на других. Это раздражает, но большинство ОС действительно предоставляют некоторые лучшие типы typedef, которые помогут вам, например uint32 и т.д., Поэтому вы выбираете нужный тип, который вам нужен.

Это хорошая работа configure script: определить, что система предоставляет, проверить, что она работает, и помочь вам выбрать правильный тип для правильной архитектуры, в которой вы работаете.

Ответ 3

По большей части это не имеет значения. Если вы не дадите ему суффикс, тип целочисленного литерала определяется его значением. Если у компилятора 32-разрядный unsigned long и 64-разрядный unsigned long long, неподписанное значение, которое слишком велико для размещения в unsigned long, но не слишком большое для unsigned long long, будет иметь тип unsigned long long.

Ответ 4

Насколько я знаю, невозможно суффикс целочисленного литерала до определенной ширины бита; ваши единственные варианты: l, ul, ll и ull.

Если вы параноик об этом, вам придется обернуть ваши литералы в #if для проверки размеров long/long long.

И снова, как указал KennyTM выше, до тех пор, пока ваши литералы находятся в 64-битном диапазоне и назначены на 64-битное значение, это не имеет большого значения, если сам литерал 64 или 128 бит или он?