茶叶提香机:VC中关于BYTE, WORD, DWORD及其与2, 16进制之间的关系总结

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 22:39:37
VC中的变量类型不是一般的多,什么BYTE, WORD, DWORD, LPARAM, WPARAM, USHORT, UCHAR...像我这样VC还处于入门级别的人很容易混淆(实事求是地讲我从来没搞明白过*^_^*)。越是这样越是从基础开始补啊,要不然到将来对VC根深入的学习时都不知道问题出在哪里。
    总结一下,BYTE, WORD, DWORD和进制之间的关系,当时在Digital circuit课程中感觉硬件学的还可以,所以现在理解并不困难。
    具体地讲, VC中,一个BYTE类型代表8个二进制位,也就是类似00000000~11111111一串二进制数。
一个WORD类型等价于两个BYTE, 也就是一组16个二进制位标示的数。 而一个DWORD等于两个WORD,也就是32个二进制位。
    每4个二进制位等价于一个16进制数的基数,所以, 一个字节可以用二个16进制基数来表示。 16进制基数与BYTE, WORD, DWORD有如下关系。
   BYTE = 0xFF FF
   WORD = 2 * BYTE = 0xFF FF FF FF
   DWORD = 2 * WORD = 4 * BYTE = 0x FF FF FF FF FF FF FF FF
   当在VC中使用 << 或 >> 操作符时,逻辑上应该保证尽量使用无符号数(这样可以减少因为符号位在移动后带来的错误几率), 移动的位数尽量小于 变量类型的二进制位数, 否则产生不可预料的错误。

 int a = 31;
 int x = 0xFFFFFFFF;
 cout << typeid(0xFFFFFFFF).name() << endl;
 cout << typeid(0x0FFFFFFF).name() << endl;
 cout << int(0xFFFFFFFF >> 31) << endl;
 cout << int(x >> 31) << endl;
 cout << int(0xFFFFFFFF >> a) << endl;

输出:Debug/Release下均为 unsigned int, int, 1, -1, 1