BYTE,WORD,DWORD的大小及一些特殊的"高低位宏"

本文详细介绍了Windows编程中常见的数据类型BYTE,WORD,DWORD的定义,以及与其相关的宏,如LOBYTE, HIBYTE, LOWORD, HIWORD, MAKEWORD和MAKELONG的使用方法和实例解析。" 124944672,8229776,使用CryptoJS的DES解密ctbpsp响应数据,"['前端开发', 'JavaScript', 'Python', '爬虫']

 

一、定义

VC6.0Microsoft Visual Studio/VC98/Include/windef.h 里,定义了BYTE,WORD,DWORD

typedef unsigned long       DWORD;

typedef unsigned char       BYTE;

typedef unsigned short      WORD;

在Visual C++ 6.0中,char型长度为1字节,short型长度为2字节,int和long型长度都为4字节,因此可以认为BYTE与WORD,DWORD定义的变量分别获得了1字节,2字节,4字节内存,正与BYTE与WORD,DWORD的字面意义相符。

:

BYTE=unsigned char(完全等同):       8

WORD=unsigned short(完全等同):  16

DWORD=unsigned long(完全等同): 32

 

 

 

下面是一些平时用得比较少的宏:

二、Window 

<think>我们正在讨论计算机体系结构中的存储单位术语:byte(字节)、word(字)、dword(双字)。它们之间的关系是递增的,通常以字节为基准进行定义。具体如下: 1. **基本定义**: - **Byte(字节)**:计算机存储的基本单位,1 byte = 8 bits(8位二进制)。 - **Word(字)**:通常由2个字节组成,即1 word = 2 bytes = 16 bits。但注意,在部分体系结构中,字的大小可能不同(如16位、32位),但最常见的是16位。 - **Dword(双字)**:即double word,由2个word组成,即1 dword = 4 bytes = 32 bits。 2. **关系总结**: | 单位 | 字节数 | 位数(通常) | 说明 | |--------|--------|--------------|---------------------------| | Byte | 1 | 8 bits | 基本单位 | | Word | 2 | 16 bits | 2个字节 | | Dword | 4 | 32 bits | 双字(2个word,4个字节) | | Qword | 8 | 64 bits | 四字(4个word,8个字节) | 3. **体系结构差异**: - **重要提示**:在x86架构中,word固定为16位(2字节),dword为32位(4字节),qword为64位(8字节)。 - 但在其他架构(如ARM)中,word可能指32位(4字节)。因此,具体大小需结合上下文和硬件平台确定。 4. **编程示例(汇编语言)**: ```assembly section .data bVar db 255 ; 定义1个字节(byte),范围0-255 wVar dw 65535 ; 定义1个字(word),范围0-65535 dVar dd 4294967295 ; 定义1个双字(dword),范围0-4294967295 ``` 5. **内存对齐规则**: - 字(word)地址应对齐到2的倍数(如0x0002, 0x0004)。 - 双字(dword)地址应对齐到4的倍数(如0x0004, 0x0008)。 - 未对齐访问可能导致性能下降或硬件异常。 6. **常见应用场景**: - **Byte**:字符存储(ASCII码)、小整数(0-255)。 - **Word**:UTF-16字符、短整数、端口号。 - **Dword**:内存地址(32位系统)、整数、浮点数(单精度)。 §§相关问题§§ 1. 在x86架构中,qword(四字)由多少字节组成? 2. 为什么不同体系结构对“字”(word)的大小定义不同? 3. 内存对齐对程序性能有何影响? 4. 在C语言中如何明确声明dword类型变量? 5. 如何判断当前计算机体系结构的字长(word size)?</think>### `byte`, `word`, `dword` 关系详解 在计算机体系结构中,`byte`(字节)、`word`(字)、`dword`(双字)是描述数据存储单位的关键概念,其关系如下: #### 1. **基本定义与关系** | 单位 | 位宽(bits) | 字节数(bytes) | 关系公式 | |----------|-------------|----------------|---------------------------| | **byte** | 8 bits | 1 byte | 基础单位 | | **word** | 16 bits | 2 bytes | `1 word = 2 × byte` | | **dword**| 32 bits | 4 bytes | `1 dword = 2 × word = 4 × byte` | > **关键点**: > - `word` 的大小与处理器架构相关: > - **x86架构**:`1 word = 16 bits`(如Intel 8086) > - **ARM架构**:`1 word = 32 bits`(现代ARMv7/v8) > - `dword`(double word)始终是 `word` 的两倍。 #### 2. **内存表示与对齐** - **存储示例**(32位整数 `0x12345678`): ``` 内存地址 | 数据(byte) | 数据(word) | 数据(dword) 0x0000 | 0x78 | 0x5678 | 0x12345678 0x0001 | 0x56 | | 0x0002 | 0x34 | 0x1234 | 0x0003 | 0x12 | | ``` - **对齐规则**: - `word` 地址需对齐到2的倍数(如 `0x0002`, `0x0004`)。 - `dword` 地址需对齐到4的倍数(如 `0x0004`, `0x0008`)。 #### 3. **编程应用示例(x86汇编)** ```assembly section .data byteVar db 0xFF ; 定义1字节(255) wordVar dw 0x1234 ; 定义1字(2字节) dwordVar dd 0x12345678 ; 定义1双字(4字节) section .text mov al, [byteVar] ; 加载byte到AL寄存器(8位) mov ax, [wordVar] ; 加载word到AX寄存器(16位) mov eax, [dwordVar] ; 加载dword到EAX寄存器(32位) ``` #### 4. **性能与兼容性影响** - **性能优化**: - 对齐的 `dword` 访问比未对齐快2-3倍(避免CPU多次读取)。 - 32位系统处理 `dword` 比 `word` 更高效(寄存器宽度匹配)。 - **兼容性问题**: - 在16位系统(如DOS)中直接操作 `dword` 需分两次处理。 - 跨架构代码需验证 `word` 大小(ARM vs x86)。 #### 5. **扩展单位关系** | 单位 | 位宽 | 等价关系 | |-----------|--------|-----------------------------| | **qword** | 64 bits| `1 qword = 2 × dword = 4 × word` | | **oword** | 128 bits| `1 oword = 2 × qword` |
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值