如何解释这个位移

How to interpret this bit shift

我有以下位移:

1011 & (~0 << 2)

我该如何计算出这个问题的答案?特别是我对 ~0 << 2 的含义感到困惑 - 我知道 << 运算符是一个移位,并且 ~ 代表 'not'.

我读到的是 ~0 是 1 的序列 - 但这是怎么回事,那里有多少个 1?

通常,int 是一个 32-bit/4-byte 值。所以 ~0 = 1111 1111 1111 1111 1111 1111 1111 1111

在你的情况下,这真的无关紧要。

你想解决1011 & (~0 << 2)

让我们逐步查看您的示例。

首先发生的是括号:

(~0 << 2) 

这是1111位左移两位。当发生提升移位时,新添加的位为 0。因此 (~0 << 2) 等于:

(1111 << 2) = 1100

最后,您只需要在 10111100 之间按位进行运算,结果为

1000 = 8