我如何从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.所有前导零都将被丢弃。