我理解:
int bit =(number>> 3)& 1;
从左边开始给我3位,所以假设8是1000,那就是0001。
我不明白的是,“& 1”将删除除最后一位之外的所有内容,以显示简单的“1”输出。我知道这是有效的,我知道如何从int得到一点但是代码是如何提取单个位的呢?
...代码
int number = 8;
int bit = (number >> 3) & 1;
Console.WriteLine(bit);
答案 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