我如何从int获得一个位?

时间:2014-02-19 10:56:45

标签: c# bit-manipulation bitwise-operators

我理解:

  

int bit =(number>> 3)& 1;

从左边开始给我3位,所以假设8是1000,那就是0001。

我不明白的是,“& 1”将删除除最后一位之外的所有内容,以显示简单的“1”输出。我知道这是有效的,我知道如何从int得到一点但是代码是如何提取单个位的呢?

...代码

int number = 8;
int bit = (number >> 3) & 1;
Console.WriteLine(bit);

4 个答案:

答案 0 :(得分:2)

除非我学校的布尔代数不合格,否则发生的事情应该等同于以下内容:

              *
  1100110101101  // last bit is 1
& 0000000000001  // & 1
= 0000000000001  // = 1

              *
  1100110101100  // last bit is 0
& 0000000000001  // & 1
= 0000000000000  // = 0

所以当你做& 1时,你基本上要做的就是将所有其他位清零,除了最后一位,它将保持原样。或者从技术上讲,您在两个数字之间执行按位AND运算,其中一个恰好是1,所有前导位都设置为0

答案 1 :(得分:0)

当你右移8时你得到0001
0001&转换为int的0001 = 0001给你1。

因此,当一个值0001被分配给一个int时,它将打印1而不是0001或0000 0001.所有前导零都将被丢弃。

答案 2 :(得分:0)

8      = 00001000
8 >> 1 = 00000100
8 >> 2 = 00000010
8 >> 3 = 00000001


If you use mask 1 = 000000001 then you have:
8 >> 3       = 000000001
1            = 000000001
(8 >> 3) & 1 = 000000001     

答案 3 :(得分:0)

实际上这并不难理解。 “& 1”操作只是将值的所有位设置为“0”,除了位,它与值“1”中的有价值位置在同一位置

之前的操作只是将所有位向右移位。并将检查的位置于操作“& 1”后不会被设置为“0”的位置

例如

号码是1011101

数字>> 3使它成为0001011

但是(数字>> 3)& 1使其成为0000001