根据代数定律思考,我想知道在比特操作领域是否存在任何官方指南,类似于代数。
代数示例
a - b =/= b - a
允许a = 7
和b = 5
a - b = 2
b - a = -2
允许a = 10
和b = 3
a - b = 7
b - 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
注意无符号字节操作: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
因此,我们可以有效地得出结论a | b =/= a + b
。
答案 0 :(得分:7)
按位运算只是在操作数的相应位之间应用的布尔运算符遵循类似于布尔代数定律的定律,例如:
OR (|)
:交换,联想,身份(0xFF),Annihilator(0x00),幂等XOR (^)
:交换,联想,身份(0x00),Annihilator(0xFF),幂等NOT (~)
:交换,联想,身份(0x00),反向(本身)a & (a | b) = a
:反向(本身)AND和OR相互吸收:
a | (a & b) = a
a & (b | c) = (a & b) | (a & c)
有一些分配运营商,例如:
a & (b ^ c) = (a & b) ^ (a & c)
a | (b & c) = (a | b) & (a | c)
~(a & b) = ~a | ~b
但请注意,XOR不会通过AND或OR分布,OR也不会分配到XOR。
DeMorgans法律以各种形式适用:
~(a | b) = ~a & ~b
(a ^ b) & (c ^ d) = (a & c) ^ (a & d) ^ (b & c) ^ (b & d)
关于XOR和AND的一些定律可以通过推理ℤ/2ℤ来找到,其中加法对应于XOR并且乘以AND:
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 (<<)
由于推动到边缘的位“破坏”,移位没有反转
right shift (>>)
:关联,分配,身份(0x00)
rotate left (rl)
:关联,分配,身份(0x00)
rr
:关联,分配,身份(0x00),反向(rotate right (rr)
)
rl
:关联,分配,身份(0x00),反向(x + (x << k)
)
虽然轮班没有反转,但一些涉及轮班的表达确实会因其他法律而产生反转,例如:
x + (x << 1) = x * 3
有一个逆,因为它实际上是一个奇数的乘法,奇数有一个模乘法逆模的幂为2。对于x * 0xAAAAAAAB
,反函数为x ^ (x << k)
(对于32位,调整其他大小的常量)x ^ (x >> k)
因类似的原因而有反转,但是通过与无进位乘法的对应。on
(无符号右移)有一个反转,它只是上面的“镜像”。