【问题标题】:What is the point WORD type in C?C中的WORD类型是什么?
【发布时间】:2013-05-27 15:10:06
【问题描述】:

在浏览一些源代码时,我发现了一个 C 程序中的方法,它接受 WORD、DWORD 和 PWORD 类型的参数。我知道它们会翻译成无符号数字,但为什么它们被称为 WORD?

【问题讨论】:

  • 我想补充一点,在为 Windows 开发时,您可以找到 in this MSDN document 类型的定义。请注意,WORD 不再是最新 CPU 的机器字的实际大小,而是保持在 16 位以保持兼容性。
  • @Dirk 实际上,在发布问题后不久,我自己在源代码中发现了这个。它位于名为 WinDef.h 的头文件中。包含这些类型的所有类型定义。谢谢。

标签: c dword


【解决方案1】:

字长和数据类型

一个词是机器一次可以处理的数据量。这适合包含字符(通常为 8 位)和页面(许多单词,通常为 4 或 8KB)作为数据的其他度量的文档类比。一个字是整数个字节,例如一、二、四或八。当有人谈论机器的“n 位”时,他们通常是在谈论机器的字长。例如,当人们说 Pentium 是 32 位芯片时,他们指的是它的字长,即 32 位,即 4 个字节。

处理器的通用寄存器 (GPR) 的大小等于其字长。给定架构中组件的宽度,例如内存总线,通常至少与字长一样宽。通常,至少在 Linux 支持的体系结构中,内存地址空间等于字大小[2]。因此,指针的大小等于字的大小。此外,C 类型 long 的大小等于字长,而 int 类型的大小有时小于字长。例如,Alpha 具有 64 位字长。因此,寄存器、指针和 long 类型的长度为 64 位。然而,int 类型是 32 位长。 Alpha 可以访问和操作 64 位,一次一个字。

进一步阅读:http://www.makelinux.com/books/lkd2/ch19lev1sec2

【讨论】:

  • 在汇编中,word 通常是 2 个字节。在我看来,另一件有用的事情是,在 GDB 中,命令xw 表示 4 个字节,h 表示 2 个字节。好像不统一。
【解决方案2】:

Windows API 中的WORD 表示 2 个字节。

它最初用于指代指针大小(如在字长为 16 位的 CPU 中)。
Windows API 在typedefs 中使用它,早在 Windows 3.1(仅支持 16 位机器)中(及之前),因此含义不能再改变了。

【讨论】:

  • 就如同 long float 是 c++ 中双精度的旧术语一样?
  • @Nurgle 在 c++ 中,要打印或扫描双精度数,请使用代表长浮点数的“%lf”。如果它们不相关,为什么会出现这种情况?
  • 我认为你的第一句话有点误导。 word 不是定义为 2 个字节,而是定义为总线/寄存器的宽度。 Windows 上的WORD 类型是 16 位的,因为它最初是为 16 位机器开发的。
【解决方案3】:

WORD 可能来自一些较旧的代码,通常表示 16 位,而DWORD 通常表示 32 位。如果你不确定你应该检查你的代码,因为它们必须在某个地方定义。

WORD 源于机器字,其大小取决于硬件。

【讨论】:

    猜你喜欢
    • 2017-11-03
    • 2011-07-26
    • 2011-01-03
    • 2013-05-01
    • 2013-11-30
    • 2016-04-21
    • 2012-10-25
    相关资源
    最近更新 更多