2012-10-06 24 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,所以你可以快速編輯它。如果我不擁有這個不完整的答案,這並不重要 –