2012-10-06 20 views
3

根据代数法则思考,我想知道是否有任何官方指导线存在于位操作领域,类似于代数。是否有任何按位运算符定律?

代数例

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。操作数的相应的位按照类似于布尔代数的法律法规之间施加

+3

这一个是必须有:http://books.google.ch/books?id=f83XxoBC_8MC&pg=PA121&lpg=PA121&dq=linda+null+boolean+algebra&source=bl&ots=5ekB3gV6Y1&sig=p5syOlOTWGbt-PN-T1fuiS2LYnk&hl= en&sa = X&ei = jrpwUKHIAez64QTK_YGoDg&redir_esc = y#v = onepage&q = linda%20null%20boolean%20algebra&f = false – Macmade

+4

这包含您可以对位运算符做的大部分有用的事情:http://graphics.stanford.edu/~seander/bithacks .html – copy

+0

谢谢。如果你们中的任何一个人张贴了答案,我会很乐意接受:) – zeboidlund

回答

1

位运算是只是一个布尔运算符,例如:

  • AND (&):可交换的,联想,标识(0xFF的),歼灭(0×00),幂等
  • OR (|):可交换的,联想,身份(0×00),歼灭(0xFF的),幂等
  • XOR (^):可交换的,联想,身份(0×00),逆(本身)
  • NOT (~):逆(本身)

AND和OR吸收对方:

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

有一些对分配操作符,如:

  • 及以上OR:a & (b | c) = (a & b) | (a & c)
  • 并通过XOR:a & (b^c) = (a & b)^(a & c)
  • 或以上,并:a | (b & c) = (a | b) & (a | c)

然而要注意XOR不分布于AND或OR,而且也不或分发了XOR。

DeMorgans法适用于各种形式:

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

了涉及XOR和AND可以通过推理领域ℤ/2ℤ,可以找到一些法律中,加法对应于XOR并乘以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 (<<):关联,分配,身份(0×00)

right shift (>>):关联,分配,身份(0×00 )

rotate left (rl):关联,分配,身份(0×00),逆(rr

rotate right (rr):联想,分配,身份(0×00),反(rl

虽然班次没有逆,涉及转移一些表述确实有逆作为其他法律后果,例如:

  • x + (x << k)有一个倒数,因为它实际上是一个乘以奇数的数,而奇数的模乘法倒数模的幂为2。对于x + (x << 1) = x * 3,反相是(对于32位,调整其他大小的常数)
  • x^(x << k)由于类似的原因具有反转,但通过与无运算乘法的对应关系。
  • 类似地x^(x >> k)(带有无符号右移)具有倒数,它只是上述的“镜像”。
+0

我没有看到更多的属性,交换性表示交换性。而且我无法将自己的头围绕分配给非换班操作员。尽管如此,我还是扩大了移位操作员,因为他们是分配所有其他操作 –

+0

是的好吧,以及我会张贴更多我猜 – harold

+0

我可以得到这个答案作为社区的wiki,所以你可以快速编辑它。如果我不拥有这个不完整的答案,这并不重要 –