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

zeb*_*und 6 computer-science boolean-logic proof bitwise-operators

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

代数例子

a - b =/= b - a

让我们a = 7b = 5

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

让我们a = 10b = 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
Run Code Online (Sandbox Code Playgroud)

注意无符号字节操作:10 | 5 = 15,它是同义词10 + 5 = 15

然而,如果两个ab等于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) = a
  • a | (a & b) = a

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

  • 和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.

DeMorgans法律以各种形式适用:

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

一些与XOR和AND相关的定律可以通过推理字段ℤ/2ℤ找到,其中加法对应于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)
  • minmax反之亦然: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)(无符号右移)有一个逆,它只是上面的"镜像".