【问题标题】:Are there any Bitwise Operator Laws?是否有任何按位运算符法则?
【发布时间】:2012-09-27 16:43:45
【问题描述】:

从代数定律的角度思考,我想知道在位操作领域是否存在任何官方指南,类似于代数。

代数示例

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

【问题讨论】:

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


【解决方案1】:

在操作数的相应位之间应用的只是布尔运算符的位运算遵循类似于布尔代数定律的定律,例如:

  • AND (&) : 可交换的、关联的、标识 (0xFF)、歼灭者 (0x00)、幂等
  • OR (|) : 可交换的、关联的、标识 (0x00)、歼灭者 (0xFF)、幂等
  • XOR (^) :可交换、关联、标识 (0x00)、逆(本身)
  • NOT (~):逆(本身)

AND 和 OR 相互吸收:

  • a & (a | b) = a
  • a | (a & b) = a

有一些分配运算符对,例如:

  • AND 或 OR:a & (b | c) = (a & b) | (a & c)
  • 与异或:a & (b ^ c) = (a & b) ^ (a & c)
  • 或大于 AND:a | (b & c) = (a | b) & (a | c)

但是请注意,XOR 不分布在 AND 或 OR 上,OR 也不分布在 XOR 上。

德摩根定律适用于各种形式:

  • ~(a & b) = ~a | ~b
  • ~(a | b) = ~a & ~b

通过推理域ℤ/2ℤ可以找到一些与XOR和AND相关的定律,其中加法对应于XOR,乘法对应于AND:

  • AND 通过 XOR 进行分配
  • 计算总和的乘积:(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)(无符号右移)有一个逆,它只是上面的“镜像”。

【讨论】:

  • 我没有看到更多的属性,Commutative 表示可交换性。而且我不能完全理解非轮班操作员的分配性。尽管如此,我还是扩展了移位运算符,因为它们可分配给所有其他操作
  • 是的,好吧,我想我会再发布一些
  • 我可以作为社区 wiki 获得此答案,因此您可以快速编辑它。如果我不拥有这个非常不完整的答案也没关系
  • 非常完整的属性摘要,我唯一能看到你没有提到的是按位旋转。干得好!
  • 得到了我想要的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2015-09-23
  • 2023-01-10
  • 2013-05-07
相关资源
最近更新 更多