我看到了链接What does it mean by word size in computer? 。它定义了字的大小。 我试图用位表示很长的字符串,其中每个字符由 4 位表示,并将其保存在长数组或整数数组中,以便在需要时提取字符串。 我可以将这些位保存在整数数组或长数组中。
- If I use long array (8 bytes) I will be able to save 8*4=32 bits in one long array.
- But if I use int I will be able to save 4*4=16 bits only.
现在,如果我的字大小=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 位类型一样”(换句话说,如果需要,则进行符号扩展,并根据需要屏蔽最高位)
关于c++ - 计算机中的字长与 int 或 long 有何关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127689/