这可能是非常基本的...但我似乎没有得到它:
如何
(2 & 1) = 0
(3 & 1) = 1
(4 & 1) = 0
等。
上面的这种模式似乎有助于找到偶数
或
(0 | 1) = 1
(1 | 1) = 1
(2 | 1) = 3
(3 | 1) = 4
(4 | 1) = 5
(5 | 1) = 5
我知道布尔代数在位之间是如何工作的。但我不明白布尔代数如何与整数一起工作(至少在C#中)。
提前感谢。
答案 0 :(得分:4)
它在C#中的工作方式与在二进制中的工作方式相同。
2 | 1 = 3
和4 | 1 = 5
。
要理解这一点,您需要考虑1,2,3,4和5的二进制表示法:
010 | 001 = 011
和100 | 001 = 101
。
同样:
010 & 001 = 000
和011 & 001 = 001
答案 1 :(得分:3)
你得到的第一个结果是因为你在两个数字的位串之间执行了一个布尔and
:
2 & 1 => 010 & 001 = 000 = 0
3 & 1 => 011 & 001 = 001 = 1
4 & 1 => 100 & 001 = 000 = 0
5 & 1 => 101 & 001 = 001 = 1
实际上,您正在测试是否设置了'1'位,这对于奇数只会是真的。
执行or
操作时:
0 | 1 => 000 | 001 = 001 = 1
1 | 1 => 001 | 001 = 001 = 1
2 | 1 => 010 | 001 = 011 = 3
3 | 1 => 011 | 001 = 011 = 3
4 | 1 => 100 | 001 = 101 = 5
5 | 1 => 101 | 001 = 101 = 5
由于在这种情况下效果或or
始终设置1
位,偶数将增加1到最接近的更大奇数。
答案 2 :(得分:1)
关键是CPU并行执行32个布尔运算,一个用于输入整数的每个位位置(假设当然是32位整数)。
答案 3 :(得分:0)
它对整数执行按位运算。它正在执行逻辑或/和第一个整数中的每个位与另一个整数中的相应位。然后它返回所有这些操作的结果。例如,4 = 0100且1 = 0001,逻辑和这些将按顺序对位进行比特并获得0000(因为0& 0 = 0,1& 0 = 0,0& 0 = 0,0& 1 = 0)。对于或,你会得到0101(因为0 | 0 = 0,1 | 0 = 1,0 | 0 = 0,0 | 1 = 1)。诀窍是这些是按位运算,而不是仅对C#中的布尔值进行操作的逻辑运算。