Windows 系统常变量 赋值的一个规则 位与 加运算 异同

本文解释了在Windows API编程中,为什么使用位或(|)运算符和算术加法(+)运算符在某些情况下效果相同。文章通过具体示例说明了微软如何通过二进制位赋值来实现这一特性,使得多个标志可以方便地进行组合。

经常会有学弟问我,在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属性了。

这给编程记忆带来了不少好处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值