Здесь говорится здесь и здесь, которые набирают long long
, по крайней мере, до int
и имеет не менее 64 бит. Я рассматривал раздел C.31 стандарта §3.9.1 "Основные типы", и я не могу найти ссылку на 64 бита. Все, что я могу найти, это то, что он как минимум длиннее long int
, который по крайней мере длиннее int
. Стандарт перечисляет long long
как стандартный целочисленный тип, в отличие от расширенного, поэтому мне интересно, истинно ли это утверждение, что long long
содержит не менее 64 бит. И если это так, то где это указано?
Обратите внимание, что я говорю только о стандарте С++ 11 long long
.
Является ли С++ 11 длинным долго, по крайней мере, 64 бит?
Ответ 1
Стандарт С++ ссылается на стандарт C для этого, см. [c.limits]. LLONG_MAX
определяется в <climits>
с тем же значением, что и C <limits.h>
LLONG_MAX
. И это то, что C должен сказать:
5.2.4.2.1 Размеры целых типов
<limits.h>
Значения, приведенные ниже, должны быть заменены постоянными выражениями, подходящими для использования в директивах
#if
предварительной обработки. [...] Их определяемые реализацией значения должны быть равны или больше по величине (по абсолютной величине) тем, которые показаны, с тем же знаком.[...]
- максимальное значение для объекта типа
long long int
LLONG_MAX +9223372036854775807 //
2 63 -1
Подписанный тип, который должен быть способен представлять значение 9223372036854775807
, требует 64 бит или более.