2016-03-15 40 views
-6

我正在看一個在C++中的嬰兒步驟巨大的步驟算法的例子,我不知道C++,但我可以理解大部分的程序,但是有兩行我只是不知道他們做什麼,不能理解一些C++

int powmod (int a, int b, int m) { 
    int res = 1; 
    while (b > 0) 
     if (b & 1) { 
      res = (res * a) % m; 
      --b; 
     } 
     else { 
      a = (a * a) % m; 
      b >>= 1; 
     } 
    return res % m; 
} 

可有人請解釋一下什麼是第一if聲明(b & 1)是檢查,並在else聲明b >>= 1爲什麼有兩種'>'運營商,這是你多麼檢查更大的/在C等於++?謝謝

+1

'如果(b&1)'檢查'b'是否爲奇數(將其低位位置1)。 'b >> = 1'將'b'右移一位,並將結果賦給'b';它大致相當於'b = b/2;'另見http://en.cppreference.com/w/cpp/language/operator_arithmetic –

+1

「我不知道C++,但我可以理解大部分程序」。 C++語法有很多很好的參考。你應該打開一個。這不是一個真正的編程問題。 –

+0

具體來說,查找位操作。 「&」(按位和)和「>>」(右移和擴展「>> =')都屬於該類別。 –

回答

1

這是:>> =是對b執行右移操作並將其重新分配給b的右移賦值操作符。 >> = 1基本上將b除以2.

它將所有位1移到右邊。如果二進制b爲00000010(十進制2),b >> = 1會使b = 00000001(十進制爲1)。另一個eg2:00001110(14)會變成00000111(7)等等。但是,如果再次失敗,並且您失去了精確度:00000111(7)變爲00000011(3)。

0

這些是位運算符。 '&'符號表示AND,在這種情況下,它將檢查'b'的二進制表示形式,其中1的二進制表示形式。'>> ='也是一個稱爲右移的按位運算符。