PDEVICE_OBJECT AAA=NULL;
PDEVICE_OBJECT BBB=NULL;
AAA->Flags |= BBB->Flags & (DO_BUFFERED_IQ | DO_DIRECT_IQ | DO_POWER_PAGABLE);
&双目就是1 1 = 1 ,只有都是1的时候1 其他都是0 与
|双目就是1 0 = 1 ,0 1 = 1 1 1 = 1 有1的时候为1 其他都是0 或
^双目就是1 0 = 1 ,0 1 = 1 其他都是0 不同的时候为1 其他都是0 异或
知道 与 或 异或 但 不知道能不能用其他写法实现一样的功能
PDEVICE_OBJECT AAA=NULL;
PDEVICE_OBJECT BBB=NULL;
AAA->Flags |= BBB->Flags & (DO_BUFFERED_IQ | DO_DIRECT_IQ | DO_POWER_PAGABLE);
一般是一些寄存器的配置问题,
(DO_BUFFERED_IQ | DO_DIRECT_IQ | DO_POWER_PAGABLE); 一般是三个宏定义的0x常量,
最后将AAA->Flags的相应位配置成合适的值
AAA->Flags |= BBB->Flags & (DO_BUFFERED_IQ | DO_DIRECT_IQ | DO_POWER_PAGABLE); (1)
其中DO_BUFFERED_IQ , DO_DIRECT_IQ , DO_POWER_PAGABLE 通常是所在位不同的宏定义常量。
假设 DO_BUFFERED_IQ | DO_DIRECT_IQ | DO_POWER_PAGABLE == 0x07 //(0b111)
相同效果语句为
AAA->Flags |= BBB->Flags & 0x07; (2)
事实上,在编译器处理时,会直接将(1)的代码处理成(2)的代码,二者执行效率是一样的,但(1)可读性比(2)强很多。
这种写法已经算比较直观了,而且执行效率也是比较高的。所以习惯就好了。