как размер слова в компьютере связан с int или long

Я видел ссылку Что это значит под размером слова в компьютере? . Он определяет размер слова.
Я пытаюсь представить очень длинную строку в битах, где каждый символ представлен 4 битами, и сохранить ее в длинном или целочисленном массиве, чтобы я мог извлечь свою строку при необходимости.
Я могу сохранить биты либо в целочисленном массиве, либо в длинном массиве.

  1. Если я использую длинный массив (8 байт), я смогу сохранить 8 * 4 = 32 бита в одном длинном массиве.
  2. Но если я использую int, я смогу сохранить только 4 * 4 = 16 бит.

Теперь, если мне дано слово Word Size = 32, тогда я должен использовать только int, а не long.

-3

Решение

Чтобы ответить на ваш прямой вопрос: не существует гарантированной связи между естественным размером слова процессора и типами 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-битный тип» (другими словами, расширять знак при необходимости и маскировать верхние биты при необходимости)

9

Другие решения


По вопросам рекламы [email protected]