Я видел ссылку Что это значит под размером слова в компьютере? . Он определяет размер слова.
Я пытаюсь представить очень длинную строку в битах, где каждый символ представлен 4 битами, и сохранить ее в длинном или целочисленном массиве, чтобы я мог извлечь свою строку при необходимости.
Я могу сохранить биты либо в целочисленном массиве, либо в длинном массиве.
- Если я использую длинный массив (8 байт), я смогу сохранить 8 * 4 = 32 бита в одном длинном массиве.
- Но если я использую int, я смогу сохранить только 4 * 4 = 16 бит.
Теперь, если мне дано слово Word Size = 32, тогда я должен использовать только int, а не long.
Чтобы ответить на ваш прямой вопрос: не существует гарантированной связи между естественным размером слова процессора и типами C и C ++. int
или же long
, Да довольно часто int
будет таким же, как размер регистра в процессоре, но большинство 64-битных процессоров не будут следовать этому правилу, поскольку это делает данные излишне большими. С другой стороны, 8-битный процессор будет иметь размер регистра 8 бит, но int
в соответствии со стандартами C и C ++ размер должен быть не менее 16 бит, поэтому компилятору придется использовать более одного регистра для представления одного целого числа [в некотором роде].
В общем, если вы хотите знать, сколько битов или байтов имеет какой-либо тип, лучше НЕ полагаться на int
, long
, size_t
или же void *
поскольку они все могут быть разными для разных процессорных архитектур или даже для разных компиляторов в одной архитектуре. int
или же long
может быть одинакового размера или разных размеров. Единственное правило, которое стандарт говорит, что long
не менее 32 бит.
Итак, чтобы контролировать количество бит, используйте #include <cstdint>
(или в C, stdint.h
), и используйте типы, например uint16_t
или же uint32_t
— тогда вы ЗНАЕТЕ, что он будет содержать заданное количество бит.
На процессоре, который имеет 36-битный «размер слова», тип uint32_t
например, не будет существовать, так как не существует типа, который содержит ровно 32 бита [наиболее вероятно]. В качестве альтернативы, компилятор может добавить дополнительные инструкции, чтобы «вести себя так, как будто это 32-битный тип» (другими словами, расширять знак при необходимости и маскировать верхние биты при необходимости)