我看过链接What does it mean by word size in computer?。它定义了字大小。 我试图用比特表示非常长的字符串,其中每个字符由4位表示并保存在长整数或整数数组中,以便我可以在需要时提取我的字符串。 我可以将这些位保存为整数数组或长数组。
- 如果我使用长数组(8字节),我将能够在一个长数组中保存8 * 4 = 32位。
- 但如果我使用int,我将只能保存4 * 4 = 16位。
醇>
现在,如果我的Word大小= 32,那么我应该只使用int而不是长。
答案 0 :(得分:9)
回答直接问题:处理器的自然字大小与C和C ++类型int
或long
之间没有保证的关系。是的,通常int
将与处理器中寄存器的大小相同,但大多数64位处理器不遵循此规则,因为它会使数据不必要地变大。另一方面,8位处理器的寄存器大小为8位,但根据C和C ++标准,int
的大小必须至少为16位,因此编译器必须使用更多比一个寄存器代表一个整数[以某种方式]。
一般来说,如果你想知道某些类型有多少位或字节,最好不要依赖int
,long
,size_t
或void *
,因为它们对于不同的处理器体系结构或甚至同一体系结构上的不同编译器都可能是不同的。 int
或long
可以是相同大小或不同大小。只有标准规定的规则是long
至少为32位。
因此,要控制位数,请使用#include <cstdint>
(或在C中stdint.h
),并使用类型uint16_t
或uint32_t
- 然后你知道它将保持给定的位数。
在具有36位“单词大小”的处理器上,例如,类型uint32_t
将不存在,因为没有类型可以正确地保存32位[最有可能]。或者,编译器可以添加额外的指令“表现得好像它是32位类型”(换句话说,如果需要,可以扩展符号,并根据需要屏蔽顶部位)