在C中理解这个符号

时间:2014-10-20 09:24:17

标签: c

&在这段代码中意思是:

(number >> 9) & 0b111

我知道&就指针而言。但不确定它在上面的代码中是如何工作的

3 个答案:

答案 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_aoption_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