我是按位操作的完全初学者(在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
有人能告诉我这句话的正确含义。此外,如果有人有一个很好的链接解释按位语法我会很感激。 感谢。
答案 0 :(得分:2)
x |= ...
是
的简写x = x | ...
它将x | ...
的值分配给x
。
1 << y
1
左移y
。 E.g。
00000001 << 1 -> 00000010
所以,
x |= (1 << y)
是 OR
x
,1
左移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,依此类推。