Windows 系统常变量 赋值的一个规则 位与 加运算 异同
2011-01-21 11:34
309 查看
经常会有学弟问我,在API编程的时候,很多时候windows.h里或者其他库里的常数系统变量的“ 位或 |”运算和 “算术运算 +”是没有区别的。而我们知道 | 和+还是有区别的。
比如 MessageBox(NULL,"``","caption",MB_OK+MB_ICONERROR);
和 MessageBox(NULL,"``","caption",MB_OK | MB_ICONERROR);
都是正确的。
GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_LAYERED
写成
GetWindowLong(Handle,GWL_EXSTYLE)+WS_EX_LAYERED
也是正确的。
这是因为M$在命名常数变量是是按二进制位赋值的。
比如举个例子,假如有个函数的某个形参的可能取值为16个。
一般我们的想法是指定整数0~15(十进制);
但是M$会这样指定:(16位二进制)
0000 0000 0000 0001
0000 0000 0000 0010
0000 0000 0000 0100
0000 0000 0000 1000
...
...
1000 0000 0000 0000
这样指定的好处就是,|和+运算都一样。给人一种组合感。
基于这样的基础上,还会有其他常量的定义。比如,你形参是:
1000 0000 0000 0001(二进制)
那么系统马上会知道,既含有0000 0000 0000 0001属性。
又含有1000 0000 0000 0000属性了。
这给编程记忆带来了不少好处。
比如 MessageBox(NULL,"``","caption",MB_OK+MB_ICONERROR);
和 MessageBox(NULL,"``","caption",MB_OK | MB_ICONERROR);
都是正确的。
GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_LAYERED
写成
GetWindowLong(Handle,GWL_EXSTYLE)+WS_EX_LAYERED
也是正确的。
这是因为M$在命名常数变量是是按二进制位赋值的。
比如举个例子,假如有个函数的某个形参的可能取值为16个。
一般我们的想法是指定整数0~15(十进制);
但是M$会这样指定:(16位二进制)
0000 0000 0000 0001
0000 0000 0000 0010
0000 0000 0000 0100
0000 0000 0000 1000
...
...
1000 0000 0000 0000
这样指定的好处就是,|和+运算都一样。给人一种组合感。
基于这样的基础上,还会有其他常量的定义。比如,你形参是:
1000 0000 0000 0001(二进制)
那么系统马上会知道,既含有0000 0000 0000 0001属性。
又含有1000 0000 0000 0000属性了。
这给编程记忆带来了不少好处。
相关文章推荐
- PHP在做二元赋值运算的时候, 返回值并不是左值,而是一个临时变量
- PHP在做二元赋值运算的时候, 返回值并不是左值,而是一个临时变量
- JavaScript基础 声明一个整形变量并赋值,两个整形变量进行加法运算
- JavaScript基础 声明一个整形变量并赋值,两个整形变量进行加法运算
- 习题10:参照Windows系统“附件”中的“计算器”,自行编写一个简易的计算器。要求:可以实现由0~4构成的整数的加减运算。
- Python3基础 ,= 一个等式给多个变量赋值
- vs2008如何新建自己工程的环境变量(局部)和 Windows系统(全局). .
- 那些年,我写过的设置Windows系统变量的vbs脚本
- 比如你给它任意一个正整数,它可以按照一定的运算规则, 计算出得到1的最少操作次数。
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
- python的直接赋值不会拷贝,只相当于变量的一个别名
- windows系统的位置变量
- C#新手入门代码 在控制台中通过输入给一个double类型变量赋值
- SC Create 创建一个Windows系统服务 转
- Windows 系统变量大全
- 在WINDOWS系统创建了一个新账户后,原来的Administrator账户不见了,怎样恢复
- (转)SC Create 创建一个Windows系统服务
- 微软正在修复Windows 10周年更新导致SSD系统冻结的一个问题
- Win10系统装SQL Server2014 :规则”Windows Management Instrumentation (WMI)服务 “失败。
- Windows 7系统如何分别设置不同网络位置的防火强规则