开发isapi filter遇到的问题:这里为什么用按位或?

wyman25 2013-01-13 06:13:52
我使用c/c++编写一个iis的isapi filter,看别人的一个源码,源码中有一句:

BOOL WINAPI __stdcall GetFilterVersion(HTTP_FILTER_VERSION *pVer)
{
pVer->dwFlags = ( SF_NOTIFY_ORDER_LOW | SF_NOTIFY_SEND_RESPONSE );//这里,(SF_NOTIFY_ORDER_LOW | SF_NOTIFY_SEND_RESPONSE )是什么意思?为什么用按位或?
pVer->dwFilterVersion = HTTP_FILTER_REVISION;
strcpy_s(pVer->lpszFilterDesc, "Replace Server Header ISAPI filter, Version 1.0");
return TRUE;
}


注释这里,为什么要用按位或?
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyman25 2013-01-13
  • 打赏
  • 举报
回复
好的,多谢。结贴
ri_aje 2013-01-13
  • 打赏
  • 举报
回复
多看代码吧,我也没发现那里专门讲这个的,本来也不是高深的东西,都是学习过程中自然而然捡起来的.
wyman25 2013-01-13
  • 打赏
  • 举报
回复
引用 3 楼 ri_aje 的回复:
是的,所以你不应该写 pVer->dwFlags = 0x03,而应该通过预定义宏组合的形式生成需要的标记组合,因为凡是支持此类用法的宏定义,都是已经涉及好了,不会出现你说的那类问题的. 比如,与定义的宏不会有某一个值是 0x03,下一个能够使用的宏值是 0x04,你看一下二进制,就知道模式了. SF_NOTIFY_ORDER_LOW = 0x01 = 0001 ……
哦,那这个我能去哪里学习呢?或者是,这个是什么话题?是“标志位运算”吗?我想去研究一下。谢谢了
ri_aje 2013-01-13
  • 打赏
  • 举报
回复
涉及 -> 设计
ri_aje 2013-01-13
  • 打赏
  • 举报
回复
是的,所以你不应该写 pVer->dwFlags = 0x03,而应该通过预定义宏组合的形式生成需要的标记组合,因为凡是支持此类用法的宏定义,都是已经涉及好了,不会出现你说的那类问题的. 比如,与定义的宏不会有某一个值是 0x03,下一个能够使用的宏值是 0x04,你看一下二进制,就知道模式了. SF_NOTIFY_ORDER_LOW = 0x01 = 0001 SF_NOTIFY_SEND_RESPONSE = 0x02 = 0010 SF_NOTIFY_ ... NEXT = 0x04 = 0100 ... 无论你怎么组合,都不会出现二义性.
wyman25 2013-01-13
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
同时记录着两个属性,比如 SF_NOTIFY_ORDER_LOW = 0x01 SF_NOTIFY_SEND_RESPONSE = 0x02 SF_NOTIFY_ORDER_LOW | SF_NOTIFY_SEND_RESPONSE 就是 0x03, 那么 pVer->dwFlags 就相当于同时记录了两个标记.
那如果有另外一个值也是0x03的,怎么办?岂不是会混淆?
ri_aje 2013-01-13
  • 打赏
  • 举报
回复
同时记录着两个属性,比如 SF_NOTIFY_ORDER_LOW = 0x01 SF_NOTIFY_SEND_RESPONSE = 0x02 SF_NOTIFY_ORDER_LOW | SF_NOTIFY_SEND_RESPONSE 就是 0x03, 那么 pVer->dwFlags 就相当于同时记录了两个标记.

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧