注:【2】:二进制;【10】:十进制;[16]:十六进制
1.&是按位与,对吗?
2:
1>按位与,我知道在二进制中有,那么16进制中也有吗?
2>如果有:
①.那么二进制中的是:如,11【2】&01【2】=01【2】,也就是1【2】;
②.那16进制的怎么算,它有不只是0,1呀.
㈠.如这两个数15【10】和17【10】所对应的二进是1111【2】和10001【2】,那么1111【2】&10001【2】=1【2】,对吧?
㈡.如这两个数15【10】和17【10】所对应的二进是0x000F【16】和0x0011【16】,那么0x000F【16】&0x11【16】等于多少呢,是0x0? 还是和二进制 计算后得的一样呢?-------------------------
3.因为有在写自定义菜单,用到了"dwFlags & MF_POPUP"(对些也不是很懂,有好多地方也用到了这种表达式,找了些资料就出了这么多问题),调试dwFlags是0x0010,而MF_POPUBP是0x00000010L,那这是怎么计算的呢?0x0010 & 0x00000010L在调试窗口中是0x0010,对吗本贴回答满意会加分
1.&是按位与,对吗?
2:
1>按位与,我知道在二进制中有,那么16进制中也有吗?
2>如果有:
①.那么二进制中的是:如,11【2】&01【2】=01【2】,也就是1【2】;
②.那16进制的怎么算,它有不只是0,1呀.
㈠.如这两个数15【10】和17【10】所对应的二进是1111【2】和10001【2】,那么1111【2】&10001【2】=1【2】,对吧?
㈡.如这两个数15【10】和17【10】所对应的二进是0x000F【16】和0x0011【16】,那么0x000F【16】&0x11【16】等于多少呢,是0x0? 还是和二进制 计算后得的一样呢?-------------------------
3.因为有在写自定义菜单,用到了"dwFlags & MF_POPUP"(对些也不是很懂,有好多地方也用到了这种表达式,找了些资料就出了这么多问题),调试dwFlags是0x0010,而MF_POPUBP是0x00000010L,那这是怎么计算的呢?0x0010 & 0x00000010L在调试窗口中是0x0010,对吗本贴回答满意会加分
解决方案 »
- 憋了一周的界面方案——滑屏+控制栏模组,请各位帮忙指点!
- 内存映射读取大容量二进制文件
- 简单问题DataGird中数据的居中问题
- CToolBar里怎么改变某个按钮的大小风格,而不影响到别的按钮?
- 使用custom control时,如何使自定义控件随它的大小变化而变化?在线等待
- 《深入浅出MFC》中又一问题!
- 桌面精灵
- 调查 :openCV 创建的窗口 没有带滚动条 晨宇思远 写了一个程序你们跑通了吗
- 各位大哥帮帮忙吧!这个贴子我已经贴了N次了,太痛苦了,谁能救救我!
- OLE DB 中有自动增长字段时的烦恼......
- OpenClipboard()函数需要参数么
- 什么是数据库引擎,什么是dsn数据源,odbc数据库与ado连接数据库的本质区别
要么24【10】也包含16【10】了,即0x0018也包含0x0010了
#define MF_MENUBARBREAK 0x00000020L
#define MF_MENUBREAK 0x00000040L//再发一组类似的
/*
* Window Styles
*/
#define WS_OVERLAPPED 0x00000000L
#define WS_POPUP 0x80000000L
#define WS_CHILD 0x40000000L
#define WS_MINIMIZE 0x20000000L
#define WS_VISIBLE 0x10000000L
#define WS_DISABLED 0x08000000L
#define WS_CLIPSIBLINGS 0x04000000L
#define WS_CLIPCHILDREN 0x02000000L
#define WS_MAXIMIZE 0x01000000L
#define WS_CAPTION 0x00C00000L /* WS_BORDER | WS_DLGFRAME */
#define WS_BORDER 0x00800000L
#define WS_DLGFRAME 0x00400000L
#define WS_VSCROLL 0x00200000L
#define WS_HSCROLL 0x00100000L
#define WS_SYSMENU 0x00080000L
#define WS_THICKFRAME 0x00040000L
#define WS_GROUP 0x00020000L
#define WS_TABSTOP 0x00010000L
2.那个0x00000000L后面的那个"L"是什么意思?
但我发现这个
#define WS_CAPTION 0x00C00000L /* WS_BORDER | WS_DLGFRAME */
也就是说,0x00C00000L 包含了下面0x00800000和0x00400000呀,怎么回事?
怎么不是0x01000000
难道,它本来就是下面两个的组合吗?
WS_CAPTION就是WS_BORDER , WS_DLGFRAME得组合,后面有注释的,即 WS_BORDER | WS_DLGFRAME (或运算)
//结果就是16(d)
// 24(d) & 16(d) = 16
//关于位运算,把数值写成2进制形式,就很清楚了。
#define WS_OVERLAPPED 0x00000000L
任何数值跟WS_OVERLAPPED进行“与”运算,都是一个零值,而不是一个非零值。
即,应该这样写
if (dwFlags & WS_OVERLAPPED == WS_OVERLAPPED)
{
}依次类推,当然,如果能确认标记本身为非零值,可以简写为
if (dwFlags & WS_CAPTION)
{
}
#define WS_OVERLAPPED 0x00000000L
这个零值,要不以后用就会用错了.