zeb*_*und 6 computer-science boolean-logic proof bitwise-operators
根据代数定律的思考,我想知道在比特操作领域是否存在任何官方指导线,类似于代数.
代数例子
a - b =/= b - a
让我们a = 7和b = 5
a - b = 2 b - a = -2让我们a = 10和b = 3
a - b = 7b - a = -7因此if a > b,b - a将是负面的等价物a - b.因此,我们可以说
|a - b| = |b - a|.
其中|x|表示绝对值x.
按位示例
a | b =/= a + b
00001010 = 10
OR 00000101 = 5
-----------------
00001111 = 15
Run Code Online (Sandbox Code Playgroud)
注意无符号字节操作:10 | 5 = 15,它是同义词10 + 5 = 15
然而,如果两个a和b等于5,我们OR他们,结果将是5,因为a = b,这意味着我们只是比较相同的确切位彼此,从而导致什么新鲜事.
同样,如果b = 7,a = 10我们OR他们我们将有15岁.这是因为
00001010 = 10
OR 00000111 = 7
-----------------
00001111 = 15
Run Code Online (Sandbox Code Playgroud)
所以,我们可以有效地得出结论a | b =/= a + b.
Sac*_*aki 10
按位运算只是在操作数的相应位之间应用的布尔运算符遵循类似于布尔代数定律的定律,例如:
AND (&) :交换,关联,身份(0xFF),Annihilator(0x00),幂等OR (|) :交换,关联,身份(0x00),Annihilator(0xFF),幂等XOR (^) :交换,关联,身份(0x00),反向(本身)NOT (~) :逆(本身)AND和OR相互吸收:
a & (a | b) = aa | (a & b) = a有一些分配运营商,例如:
a & (b | c) = (a & b) | (a & c)a & (b ^ c) = (a & b) ^ (a & c) a | (b & c) = (a | b) & (a | c)但请注意,XOR不会通过AND或OR分布,OR也不会分配到XOR.
DeMorgans法律以各种形式适用:
~(a & b) = ~a | ~b~(a | b) = ~a & ~b一些与XOR和AND相关的定律可以通过推理字段ℤ/2ℤ找到,其中加法对应于XOR并乘以AND:
(a ^ b) & (c ^ d) = (a & c) ^ (a & d) ^ (b & c) ^ (b & d)有些法则结合了算术运算和按位运算:
a - b = ~(~a + b)a + b = (a ^ b) + ((a & b) << 1)min成max反之亦然:min(a, b) = ~max(~a, ~b),max(a, b) = ~min(~a, ~b)由于推动到边缘的位的"破坏",移位没有反转
left shift (<<) :关联,分配,身份(0x00)
right shift (>>) :关联,分配,身份(0x00)
rotate left (rl):关联,分配,身份(0x00),反向(rr)
rotate right (rr):关联,分配,身份(0x00),反向(rl)
虽然轮班没有反转,但是一些涉及轮班的表达确实会因其他法律而产生反转,例如:
x + (x << k)具有逆,因为它实际上是乘以奇数而奇数具有模乘法逆模的2的幂.对于x + (x << 1) = x * 3,反向是x * 0xAAAAAAAB(对于32位,调整其他大小的常量)x ^ (x << k) 由于类似的原因,它有一个倒数,但通过与无进位乘法的对应关系.x ^ (x >> k)(无符号右移)有一个逆,它只是上面的"镜像".