计算机中的字长与 int 或 long 有何关系
how is word size in computer related to int or long
我看过 link 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.
现在,如果我的 Word Size=32 那么我是否应该只使用 int 而不是 long。
回答您的直接问题:处理器的自然字大小与 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 位 "wordsize" 的处理器上,例如类型 uint32_t
将不存在,因为不存在恰好包含 32 位的类型 [最有可能]。或者,编译器可能会向 "behave as if it's a 32-bit type" 添加额外的指令(换句话说,必要时进行符号扩展,并根据需要屏蔽顶部位)
我看过 link 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.
现在,如果我的 Word Size=32 那么我是否应该只使用 int 而不是 long。
回答您的直接问题:处理器的自然字大小与 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 位 "wordsize" 的处理器上,例如类型 uint32_t
将不存在,因为不存在恰好包含 32 位的类型 [最有可能]。或者,编译器可能会向 "behave as if it's a 32-bit type" 添加额外的指令(换句话说,必要时进行符号扩展,并根据需要屏蔽顶部位)