C语言中的WORD类型有什么作用?

26

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

在计算机科学中,WORD是指“字”,是指由若干位二进制数组成的固定长度数据类型。WORD通常是16位,也就是两个字节。因此,在C程序中,WORD、DWORD和PWORD通常用于表示特定长度的无符号整数。

1
我想补充一点,当你开发Windows应用程序时,你可以在这个MSDN文档中找到类型的定义。请注意,对于最近的CPU,WORD不再是机器字的实际大小,而是为了兼容性而保持在16位。 - Dirk
@Dirk 我在发布问题后不久就在源代码中找到了这个。它在一个名为WinDef.h的头文件中。其中包含了所有这些类型的typedefs。谢谢。 - Nealon
3个回答

40

字长和数据类型

字长是计算机一次处理的数据量。这类似于文档中字符(通常为八位)和页面(多个字,通常值为4或8KB)作为其他数据测量单位的类比。字长是整数字节数,例如1、2、4或8。当有人谈论某台机器的“n位”时,他们通常在谈论该机器的字长。例如,当人们说Pentium是32位芯片时,他们指的是其字长,即32位,或者四个字节。

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

更多阅读:http://www.makelinux.com/books/lkd2/ch19lev1sec2


3
在汇编语言中,“word”通常表示2个字节。从我的角度来看,另一个奇怪的事情是,在GDB中,“x”命令中,“w”表示4个字节,“h”表示2个字节。这似乎不太统一。 - Eric

4

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

最初它用于指代指针大小(例如一个具有16位字长的CPU)。
Windows API在Windows 3.1(仅支持16位机器)之前和之后使用了它,所以意义不能再改变了。


在C++中,long float是double的旧称吗? - Nealon
@Nurgle 在C++中,要打印或扫描双精度浮点数,需要使用"%lf",它代表长浮点数。为什么会这样呢?它们并没有关联吗? - Nealon
2
我认为你的第一句话有点误导性。一个“word”并不是定义为2个字节,而是总线/寄存器的宽度。在Windows上,“WORD”类型是16位的,因为它最初是为16位机器开发的。 - Dirk

2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接