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

标签 c++ c cpu-word cpu-architecture

我看到了链接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.

现在,如果我的字大小=32,那么我应该只使用 int 而不是 long。

最佳答案

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

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

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

在具有 36 位“字长”的处理器上,类型 uint32_t例如,将不存在,因为[最有可能]没有精确保存 32 位的类型。或者,编译器可能会添加额外的指令来“表现得像 32 位类型一样”(换句话说,如果需要,则进行符号扩展,并根据需要屏蔽最高位)

关于c++ - 计算机中的字长与 int 或 long 有何关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127689/

相关文章:

c++ - 结合批处理和 C++

python - 需要帮助将 C 函数移植到 Python

c - 如何使用 fscanf 跳过文件中的内容?

python - python 将一列的括号中的字符串插入到另一列的字符串的开头

python - 如何迭代两个 Python 列表以获取西类牙语和英语中相似的单词

c++ - Logger::getInstance 在 log4cplus 中导致 bad_alloc 异常

C++ 双端队列 : when iterators are invalidated

javascript - Div 可编辑以及更多...更多

C++ 初学者编程 - 循环和 while 语句

c - 为什么在将数字转换为无符号类型时会对其进行符号扩展?