声明是什么(1<

时间:2013-02-16 19:31:26

标签: bit-manipulation bitwise-operators

我是按位操作的完全初学者(在C上也没有很多经验)我碰到了表达式:

x |= (1<<y)

起初我认为这意味着“x等于x或y向左移位”,但后来我意识到这将是:

x |= (y<<1)

最后我认为这意味着“x等于x或1向左移位y位”,但我不明白1在8位寄存器中的位置,它是否意味着00000001?这样:

a = 2
b = 1<<a // so b=00000010

有人能告诉我这句话的正确含义。此外,如果有人有一个很好的链接解释按位语法我会很感激。 感谢。

2 个答案:

答案 0 :(得分:2)

x |= ...

的简写
x = x | ...

它将x | ...的值分配给x

1 << y

1左移y。 E.g。

00000001 << 1 -> 00000010

所以,

x |= (1 << y)

OR x1左移y(并将结果分配给x)。
换句话说,它将x y'th 位设置为1

x = 01010101
x |= (1 << 1)   -> 01010111  (it set the 2nd bit to 1)

答案 1 :(得分:1)

第一个语句意味着左移二进制表示1(0b0000001)y位。然后OR值与X. 第二个陈述的假设是正确的。 第三个陈述将产生4(0b0000000100)。 在位操作语义方面,C标准定义了所有要表示的位操作,使得二进制数从右到左读取,并且上升值为2。您不需要担心字节序或两个补码等,编译器将处理为了你。所以(0b00100)= 4,(0b000010)= 2,(0b00001)= 1,依此类推。