2011-07-12 22 views
26
  1. 2的冪模如何僅對二進制數的較低位(1011000111011010)起作用?
  2. 什麼是這個數字模2來電0,2來電4?
  3. 2的權力與模運算符有什麼關係?它是否擁有特殊的財產?
  4. 有人可以舉個例子嗎?

導師說:「當你拿一些mod到2的冪時,你只需要低位」。我太害怕問他是什麼意思=)按位運算符上的權力2的調整?

+3

你爲什麼不嘗試一些例子計算通過手,那麼你就看看會發生什麼。 – starblue

回答

39

他的意思是,服用number mod 2^n相當於剝離所有,但n最低階(最右側)number位。

例如,如果n == 2,

number  number mod 4 
00000001  00000001 
00000010  00000010 
00000011  00000011 
00000100  00000000 
00000101  00000001 
00000110  00000010 
00000111  00000011 
00001000  00000000 
00001001  00000001 
etc. 

因此,換句話說,number mod 4相同number & 00000011(其中&裝置按位和)


注意這在基數10中完全相同:number mod 10給出了基數爲10的最後一位數字,number mod 100給出了最後兩位數字等。

+1

只有當所有操作數都是正數時纔是這種情況!根據不同的語言,行爲將有所不同。例如在C中,'-5%4 == -1'儘管在代數中我們通常期望'-5 mod 4'是3(並且在C:'-5&(4 - 1)== 3這意味着例如,如果左操作數不是無符號的,編譯器將不會優化文字'%4' – calandoa

+0

@calandoa:我們在此討論二進制數字系統,而不是位編碼編號'-5',例如寫成'-101' –

+0

@BlueRaja:當然我們正在談論位編碼:'&'沒有被定義爲數學'-',我想你的評論更多的是「我們不是在談論負數「,也許我們不是,但是在問題和答案中都不清楚,所以我說得更清楚。 – calandoa

23

他的意思是說:

x modulo y = (x & (y − 1)) 

當y爲2

例子的功率:

0110010110 (406) modulo 
0001000000 (64) = 
0000010110 (22) 
^^^^<- ignore these bits 

使用你的例子現在:

1011000111011010 (45530) modulo 
0000000000000001 (2 power 0) = 
0000000000000000 (0) 
^^^^^^^^^^^^^^^^<- ignore these bits 

1011000111011010 (45530) modulo 
0000000000010000 (2 power 4) = 
0000000000001010 (10) 
^^^^^^^^^^^^<- ignore these bits 
+0

嘿謝謝你的回覆。我沒有完全明白你的例子嗎?當y = 1時, –

+0

不起作用。 –

+0

@Rzu它確實有效。任何以1爲模的數等於0. –

9

考慮以10爲模的數字。如果你這樣做,你只需要得到數字的最後一位數字。

334 % 10 = 4 
    12345 % 10 = 5 

同樣,如果你以100爲模數,你只會得到最後兩位數。

334 % 100 = 34 
    12345 % 100 = 45 

所以,你可以通過查看二進制的最後一位數來得到二的冪的模。這與做一個按位和。

+0

這是否也適用於2的冪數? 54%32這是2^5給出22. –

+0

波波:是的。最後的位數由您使用的兩個冪決定。正如Cicada所描述的那樣,你會計算它爲54&(32-1)。 – Brian

4

模通常返回除法後的值的其餘部分。因此,例如,x mod 4根據x返回0,1,2或3。這些可能的值可以用二進制(00,01,10,11)中的兩位來表示 - 另一種做x mod 4的方法是簡單地將所有位設置爲除了最後兩位之外的零。

例子:

 x = 10101010110101110 
x mod 4 = 00000000000000010 
2

回答您的具體問題:

  1. MOD是求餘運算符。如果應用於0,1,...中的一系列數字x,則x mod n將爲無窮多,其中x mod n將爲0,1,...,n-1,0,1,...,n-1。當你的模數n是2的冪時,那麼x mod n將以從0到n-1的二進制計數,回到0到n-1等。對於看起來像二進制01xxxxx的模數n,x mod n將遍歷所有這些低位的xxxxx。
  2. 二進制1011000111011010 mod 1是0(mod 2^0產生最後的零位;所有mod 1都是零)。二進制1011000111011010 mod二進制10000爲1010(mod 2^4產生最後四位)。
  3. 除法和其餘的二進制數的冪二是特別有效的,因爲它只是移位和屏蔽;數學上沒有什麼特別的。
  4. 例如:請參見回答問題2