能力值:
( LV2,RANK:10 )
2 楼
把那句代码转换下:
int a= 16, b=4, c = 0; //
if( a&b )
c |= b;
这个if 语句的逻辑含义是什么呢? 不需解释& 或 | 的含义,这个清楚。
能力值:
( LV2,RANK:10 )
3 楼
这样?
如果 harddiskobj->Flags有DO_BUFFERED_IO标志位,则
给myfilterobj->Flags添加DO_BUFFERED_IO标志位
能力值:
( LV2,RANK:10 )
4 楼
DO_BUFFERED_IO = 0x00000004 ,二进制也就是0100。
若harddiskobj->Flags是十进制5,也就是0101。
那 harddiskobj->Flags & DO_BUFFERED_IO 结果为0100,也就是4,结果非0。
此时那也就是说harddiskobj->Flags有DO_BUFFERED_IO标志位? 转不过来弯。
能力值:
( LV2,RANK:10 )
5 楼
myfilterobj->Flags |= DO_BUFFERED_IO;其实应该是:
myfilterobj->Flags = (myfilterobj->Flags )|(DO_BUFFERED_IO);
能力值:
( LV2,RANK:10 )
6 楼
嗯。就是不明白其中的逻辑意义,如何理解 if 语句这段代码 ?
能力值:
( LV2,RANK:10 )
7 楼
对于DO_BUFFERED_IO标志位
如果harddiskobj有,那么myfilterobj一定要有,不管之前有没有。
如果harddiskobj没有,那么myfilterobj保持不变,之前可以有,也可以没有。
能力值:
( LV2,RANK:10 )
8 楼
谢谢。终于有些开窍了。我的理解:
程序转化下看着方便:
int a =5, b = 4, c =5; // b是一个标志,a和c 任意初始化
if( a & b)
c |= b;
这样理解:
根据源程序上下文,其中b 是一个结构体的成员,这个成员用来作为结构体的一个标志。b的二进制为:00000100。
实际上b右数第三位的1就是这个标志位,也就是十进制的标志。
if(a & b) //如果a & b为非0,也就是当a的标志位(右数第三位)为1,则该条件成立。
c = c | b; // c | b 这句按位或,也就是将c 的标志位(右数第三位)设置成1,其他位不变。
也就是只看二进制位有没有标志位1,若有,则该变量有这个标志;否则,则没有标志。
不知表达清楚没有。
能力值:
( LV2,RANK:10 )
9 楼
楼主的c要加油啊
能力值:
( LV2,RANK:10 )
10 楼
是啊