是否有任何按位运算符法?

时间:2012-10-06 23:09:58

标签: computer-science bitwise-operators boolean-logic proof

根据代数定律思考,我想知道在比特操作领域是否存在任何官方指南,类似于代数。

代数示例

a - b =/= b - a

允许a = 7b = 5

  • a - b = 2
  • b - a = -2

允许a = 10b = 3

  • a - b = 7
  • b - a = -7

因此if a > bb - 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

同义

但是,如果ab都等于5,我们OR,结果将是5,因为a = b,这意味着我们只是比较彼此相同的精确位,因此没有任何新的东西。

同样,如果b = 7a = 10和我们OR我们将有15个。这是因为

    00001010 = 10
 OR 00000111 = 7
 -----------------
    00001111 = 15

因此,我们可以有效地得出结论a | b =/= a + b

1 个答案:

答案 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)

有一些分配运营商,例如:

  • AND OR:a & (b ^ c) = (a & b) ^ (a & c)
  • AND XOR:a | (b & c) = (a | b) & (a | c)
  • OR&:~(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:

  • AND通过XOR分发
  • 计算总和产品: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(无符号右移)有一个反转,它只是上面的“镜像”。