计算机中的字长与 int 或 long 有何关系

how is word size in computer related to int or long

我看过 link What does it mean by word size in computer? 。它定义了字的大小。 我试图以位表示非常长的字符串,其中每个字符由 4 位表示,并将其保存在长数组或整数数组中,以便我可以在需要时提取我的字符串。 我可以将这些位保存在整数数组或长数组中。

  1. If I use long array (8 bytes) I will be able to save 8*4=32 bits in one long array.
  2. But if I use int I will be able to save 4*4=16 bits only.

现在,如果我的 Word Size=32 那么我是否应该只使用 int 而不是 long。

回答您的直接问题:处理器的自然字大小与 C 和 C++ 类型 intlong 之间没有保证的关系。是的,int 通常与处理器中寄存器的大小相同,但大多数 64 位处理器不遵循此规则,因为它会使数据变得不必要地大。另一方面,8 位处理器的寄存器大小为 8 位,但根据 C 和 C++ 标准 int 的大小至少需要 16 位,因此编译器必须使用更多而不是一个寄存器来表示一个整数[以某种方式]。

一般来说,如果您想知道某种类型有多少位或字节,最好不要依赖 intlongsize_tvoid *,因为对于不同的处理器架构甚至同一架构上的不同编译器,它们都可能不同。 intlong 可能大小相同或不同。标准所说的唯一规则是 long 至少是 32 位。

因此,要控制位数,请使用 #include <cstdint>(或在 C 中,stdint.h),并使用类型,例如 uint16_tuint32_t - 那么你就知道它将保存给定的位数。

在具有 36 位 "wordsize" 的处理器上,例如类型 uint32_t 将不存在,因为不存在恰好包含 32 位的类型 [最有可能]。或者,编译器可能会向 "behave as if it's a 32-bit type" 添加额外的指令(换句话说,必要时进行符号扩展,并根据需要屏蔽顶部位)