Тип "long long" всегда 64 бит? - PullRequest
       17

Тип "long long" всегда 64 бит?

3 голосов
/ 27 января 2010

Я пытаюсь реализовать дополнительный алгоритм Multiply-With-Carry Джорджа Марсальи в C. Он, кажется, прекрасно работает в 64-битной Win7 и 32-битной Linux, но, кажется, странно ведет себя в 32-битной Win 7. Случайное число, которое он возвращает, является 32-битным, но есть внутреннее временное значение, которое должно быть 64-битным, и оно объявлено:

unsigned long long t;

Я подозреваю, что может быть причиной плохого поведения, поэтому мой вопрос:

Является ли тип "long long" 64 бит? Поддерживается ли это в 32-битной Windows?

Ответы [ 2 ]

7 голосов
/ 27 января 2010

Если у вашего компилятора stdint.h, я бы предложил использовать uint64_t.

5 голосов
/ 27 января 2010

Тип long long гарантированно равен не менее 64 бит (хотя гарантия формально представлена ​​в виде диапазона значений, которые она должна быть в состоянии представить).

Следующее содержится в §5.2.4.2.1 стандарта C99 (ссылка на черновик) :

- максимальное значение для объекта типа unsigned long long int

ULLONG_MAX 18446744073709551615 // 2**64 − 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...