我如何从int得到一个位?

我明白那个:

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

将给我从左边的位3位,所以假设8是1000所以这将是0001。

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

码…

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

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

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

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

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

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

例如

号码是1011101

数字>> 3使它成为0001011

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

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

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