&在这段代码中意思是:
(number >> 9) & 0b111
我知道&就指针而言。但不确定它在上面的代码中是如何工作的
答案 0 :(得分:8)
让我们分解:
(number >> 9) & 0b111
| | | | |
| | | | Binary '7'*
| | | Binary AND
| | Number to shift by
| Binary shift operator
Variable
我们将从括号中的表达式开始:
(number >> 9)
这将执行二次右移9个位置。例如:
1101101010010011
将转为:
0000000001101101
&
符号为二进制AND
。如果两个源变量中的位都是1
,则返回的值将设置这些位:
01101
& 11010
= 01000
因此,您的代码会将您的号码转移9位,并针对AND
对结果执行b111
。由于三个最低有效位都在第二个输入中设置,因此该操作的结果将是在移位输入的最后三位中设置的位。
示例:
number = 1101101010010011
number >> 9 = 0000000001101101
(number >> 9) & '111' = 0000000000000101
另一种思考方式如下:该行提取第10-12位并将其作为结果返回。
XXXXbbbXXXXXXXXX -> bbb
常见的用途是将掩码应用于值以提取位。例如。某些库允许您传递具有可枚举类型的参数,如下所示:
set_params(option_a | option_b);
设置option_a
和option_b
。
是否设置参数可以通过以下方式读取:
set_params(unsigned int params)
{
if (params & option_a)
{ /* do option_a stuff */}
}
*假设您的编译器具有C规范的二进制扩展名。否则您可以使用0x7
(十六进制7)或7
答案 1 :(得分:1)
按位AND 运算符。
更多信息: Wikipedia link
答案 2 :(得分:1)
&
是按位AND
C运营商在这里: https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B