各位朋友你们好,帮我看看这段代码是什么意思?我真的不明白。太穷了没有分!是朋友就不要介意。

时间:2021-07-12 21:10:48
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

我想知道以上这两段是什么意思?
这个函数是怎么一回事,还有的就是,为什么一个字符串和一个十六进制的数"<"这样呢?还有就是(IDM_ABOUTBOX & 0xFFF0)这样是什么意思?不太明白。
BOOL CQQLimitDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

10 个解决方案

#1


1.IDM_ABOUTBOX是字符串吗?你在它上面点一下鼠标右键选择转到定义看一下。
2.// IDM_ABOUTBOX must be in the system command range.
这行注释能看明白吗?就是说下在的两行代码是检测IDM_ABOUTBOX这个常量的值是否系统命令范围之内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);    //要是16的倍数
    ASSERT(IDM_ABOUTBOX < 0xF000);       //要小于0xF000
这两个条件符合就在系统命令范围之内了。

#2


谢谢这位朋友热情回复!
&0xFFF0 这样是什么意思?这个数值是多少?就是这里我觉得怪怪的。

#3


 & “按位与”运算符
0&0 = 0;
0&1 = 0;
1&1 = 1;
3 = 00000011(二进制)
5 = 00000101(二进制)
3&5 = 0000001(二进制)
0xFFF0 (16进制)=
1111111111110000(二进制)

#4


这一句
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
中的&0xFFF0是把IDM_ABOUTBOX这个值的低4位清0,高12位不变。
整句就是要检测一下IDM_ABOUTBOX的低4位是否为0,也就是说看它是否是16的倍数。
如果它的低4位不是0,那么
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
返回就是假,ASSERT将通不过。所以这句就是要求IDM_ABOUTBOX是16的倍数。

#5


汗~~1分。

#6


两位真够朋友!!!

多谢你!!!

一分,我是穷人,那有分呢。多谢了!

#7


谢谢

#8


敢问楼主是在研究范例 ime.sln 吗

#9


这个怎么和我下载的那个源码一模一样,我们老师留的作业看都看不懂,真是郁闷死了,都看不懂,可怎么写啊

#10


学到了一些东西

#1


1.IDM_ABOUTBOX是字符串吗?你在它上面点一下鼠标右键选择转到定义看一下。
2.// IDM_ABOUTBOX must be in the system command range.
这行注释能看明白吗?就是说下在的两行代码是检测IDM_ABOUTBOX这个常量的值是否系统命令范围之内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);    //要是16的倍数
    ASSERT(IDM_ABOUTBOX < 0xF000);       //要小于0xF000
这两个条件符合就在系统命令范围之内了。

#2


谢谢这位朋友热情回复!
&0xFFF0 这样是什么意思?这个数值是多少?就是这里我觉得怪怪的。

#3


 & “按位与”运算符
0&0 = 0;
0&1 = 0;
1&1 = 1;
3 = 00000011(二进制)
5 = 00000101(二进制)
3&5 = 0000001(二进制)
0xFFF0 (16进制)=
1111111111110000(二进制)

#4


这一句
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
中的&0xFFF0是把IDM_ABOUTBOX这个值的低4位清0,高12位不变。
整句就是要检测一下IDM_ABOUTBOX的低4位是否为0,也就是说看它是否是16的倍数。
如果它的低4位不是0,那么
(IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX
返回就是假,ASSERT将通不过。所以这句就是要求IDM_ABOUTBOX是16的倍数。

#5


汗~~1分。

#6


两位真够朋友!!!

多谢你!!!

一分,我是穷人,那有分呢。多谢了!

#7


谢谢

#8


敢问楼主是在研究范例 ime.sln 吗

#9


这个怎么和我下载的那个源码一模一样,我们老师留的作业看都看不懂,真是郁闷死了,都看不懂,可怎么写啊

#10


学到了一些东西