c++ - 为什么 DWORD 值通常以十六进制表示?

标签 c++ windows visual-c++ hex dword

我想了解为什么 DWORD 值经常在 MSDN 上用十六进制描述。

我分析这个的原因是因为我试图从根本上理解为什么存在所有这些不同的数字数据类型。一位本地导师向我暗示,DWORD 和其他 Microsoft 类型的创建与处理器的发展有关。这为我理解这些数据类型提供了意义和背景。我想要更多背景信息。

无论哪种方式,我都可以使用一些解释或一些资源来了解如何记住 DWORD、无符号整数、字节、位、WORD 等之间的区别。

总而言之,我的问题是: 1) 为什么 DWORD 以十六进制表示? 2) 您能否提供有关数值数据类型之间差异及其创建原因的资源?

最佳答案

计算机中的一切都是一堆 0 和 1。但是用二进制写一个完整的 DWORD 是非常乏味的:

00000000 11111111 00000000 11111111

为了节省空间和提高可读性,我们喜欢用更短的形式来写。十进制是我们最熟悉的,但不能很好地映射到二进制。八进制和十六进制映射非常方便,与二进制位完全对齐:

// each octal digit is exactly 3 binary digits
01 010 100 binary  =  124 octal

// each hexadecimal digit is exactly 4 binary digits
0101 0100 binary   =  54 hexadecimal

由于十六进制与 8 位字节(2 个十六进制数字构成一个字节)非常吻合,因此这种表示法被固定下来,并且这是最常使用的。在摆弄位掩码时更容易阅读、更容易理解、更容易排列。

识别正在使用哪个碱基的常规速记:

  1234543 = decimal
 01234543 = octal (leading zero)
0x1234543 = hexadecimal (starts with 0x)

至于你问的BYTE、WORD、DWORD等...

计算机是从一点开始的。只有 1 或 0。他在原版 Tron 中有一个客串。

字节长 8 位(好吧,从前有 7 位字节,但我们可以忽略它们)。这允许你有一个从 0-255 的数字,或者一个从 -128 到 127 的有符号数。比 1/0 更好,但仍然有限。您可能听说过“8 位游戏”。这就是我们所指的。该系统是围绕字节构建的。

然后计算机发展到拥有 16 位寄存器。这是 2 个字节,并被称为 WORD(不,我不知道为什么)。现在,数字可以是 0-65535 或 -32768 到 32767。

我们继续需要更多功能,计算机扩展到 32 位寄存器。 4 Bytes, 2 Words,也称为DWORD(双字)。时至今日,您可以在“C:\Windows”中查看“system”(旧的 16 位组件)和“system32”(新的 32 位组件)的目录。

然后是 QWORD(四字)。 4 个字,8 个字节,64 位。听说过 Nintendo-64 吗?这就是名字的由来。现代建筑现在就在这里。 cpu 内部包含 64 位寄存器。您通常可以在此类 cpu 上运行 32 位或 64 位操作系统。

这涵盖了位、字节、字、双字。这些是原始类型,通常用于标志、位掩码等。如果你想保存一个实际数字,最好使用有符号/无符号整数、长整数等。

我没有介绍 float ,但希望这对总体思路有所帮助。

关于c++ - 为什么 DWORD 值通常以十六进制表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655283/

相关文章:

java - 父进程被运行 java jar 的子 cmd.exe 进程意外杀死 - WINDOWS 7 问题 - C++

c++ - 类成员 `B` 的析构函数,为什么在下面的代码片段中调用它?

c++ - 从结构或类中提取成员变量

python - windows 中的合成器听起来比 linux 中的好得多(python 和 pyttsx3)

python - 如何使用 Python 暂时禁用键盘输入

c++ - 从派生类和基类调用函数

c++ - 带三角条的圆圈

windows - 在 Windows 上的 Webstorm 中自动编译 Jade

c++ - 如何从 DLL 中检索数组变量? (视觉 C++)

C++ 错误 C2451 条件字符串是非法的