从bin值读取位的顺序是什么?拥有例如关于lParam
消息的WM_CHAR
的{{3}}网站,他们解释了哪些位具有什么含义。我应该从扫描代码值获取 16-23 位,还是应该从右向左读取位,反之亦然?
答案 0 :(得分:2)
您链接到的页面使用LSB 0 bit numbering,因此您可以使用以下方式提取16-23位:
lParam & 0b00000000111111110000000000000000U
// | | | |
// bit 31 23 16 0
// MSB LSB
注意:二进制数的0b
前缀需要C ++ 14。在C语言中,它仅在某些实现中可用作扩展。
您可能还希望将结果向下移
(lParam & 0b00000000111111110000000000000000U) >> 16U
或更简单
(lParam >> 16U) & 0b11111111U // or (lParam >> 16U) & 0xFFU
答案 1 :(得分:1)
两种方式:
Salary=db.query("select * from Salary")
bySal=["?<=1000" ,"?>1000 && ?<=5000","?>=5000"]
bySalGroup=sales.enum(bySal,SalGroup)
result=bySalGroup.new(bySal(#):bySal,SalGroup.select(~.age<28).count():Age_28,SalGroup.select(~.age<38).count():Age_38,SalGroup.select(~.age<48).count():Age_48)
以及提取位的用法:
UINT bitsxtractBits(UINT val, int startBit, int nbits)
{
UINT mask = ((UINT)1 << nbits) - 1;
return (val & mask) >> startBit;
}
//note it will not work if you want to extract all bits (in this case 32).
//but in this case you do not need to extract them :)
或
bitsxtractBits(message, 16, 8)