Есть ли такая вещь, как 64-битный Int в C ++? - PullRequest
5 голосов
/ 02 марта 2011

Существует ли реальная комбинация платформы / компилятора, которая определяет int как 64 бита? Или это просто используется, чтобы напугать новых программистов, таких как я, на использование int32_t там, где размер имеет значение (например, сохранение в файл), чтобы сделать его «переносимым»?

Ответы [ 5 ]

8 голосов
/ 02 марта 2011

Таких систем абсолютно нет. Там может быть больше в будущем (или не может). И хотите ли вы сделать ставку на то, что int будет на возможной 128-битной архитектуре?

В Википедии есть неполное, но полезное краткое изложение: http://en.wikipedia.org/wiki/64-bit#64-bit_data_models

1 голос
/ 02 марта 2011

Я считаю, что в c99 long long обычно 64 бит. GCC и Microsoft оба используют это соглашение.

http://jk -technology.com / с / inttypes.html # long_long

0 голосов
/ 02 марта 2011

Если вы хотите, чтобы ваш код был переносимым, вы можете хранить 64-битные значения в long long.

0 голосов
/ 02 марта 2011

Конечно, есть компиляторы, которые имеют 64 бит ints.

int - это, как правило, размер естественного размера слова для вашей архитектуры (то есть 64-битная система имеет 64-битную ints, 16-битная система имеет 16-битную ints и т. Д.).

И вам не следует использовать int32_t, если вы не знаете, что для переменной требуется 32 бита, например, для сетевого протокола, двоичного формата файла или аппаратного регистра.Если вы используете int32_t на 64-битной машине, где это не нужно, то вы можете представлять проблему с производительностью без причины.Поскольку int - это натуральный размер слова, он также является наиболее эффективным типом данных.Это особенно верно для архитектур RISC.

0 голосов
/ 02 марта 2011

Я знаю, что в SGI 64-bit IRIX давным-давно тип long объявлял 64-битное целое число, если только вы не прошли флаг -n32 и не получили 32-битный код. Решение Sun состояло в том, чтобы создать тип long long, который был бы 64-битным, и оставить long как 32-битный. Старая ОС Apple Macintosh рассматривалась как int как 16 бит. Проходя мимо, я могу отметить, что char - это 16 бит на нескольких процессорах TI.

За исключением решения long long (так как оно изменило синтаксис языка в то время), все они были законными в соответствии со стандартом C. Так что, да, логика <stdint.h> не , а просто страшная история. Это случилось.

...