2016-12-16 579 views
-3

我不明白a<<b是如何工作的。C++中的「(」<<「)是什麼意思?

它實際上對a+= arr[i][j] ==0 && tfunc(i,j);意味着什麼?

這是否意味着:代碼

if (arr[i][j]==0 && tfunc(i,j) == true) 
    a += 1; 

部分將是如下:

int *eFunc(int* a) const{ 
    for(int i=0; i<8; ++i){ 
     for(int j=0; j<8; ++j){ 
     *a = b <<3^j; 
      a+= arr[i][j] ==0 && tfunc(i,j); 
     } 
    } 
    return a; 
} 

在此先感謝

+6

這意味着有程序員在那裏有一個糟糕的想法是什麼好的代碼。您可能想了解運營商:https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B – stefan

+1

@stefan這可能是手動優化的代碼來刪除分支。但它真的應該被嚴重評論... – Quentin

+1

你不明白哪些特定的位?語法?運營商的優先權?它實際上實現的邏輯? – Useless

回答

2
*a = b <<3^j; 

感謝@Holt用於指出<<具有比^更高的優先級。讓我們做一步一步來:

(b << 3)^j 
b << 3  // Bitshifting operator. Shift b to the left by 3` 
      // So for b = 0b0001 you get 0b1000 = 8 
    ^j // XOR with j for example 
      // 0b1000^0b0010 = 0b1010 = 10 

,並在年底你值分配給地方a點。

a+= arr[i][j] ==0 && tfunc(i,j); 
    arr[i][j] ==0    // if the element [i][j] from arr == 0 return true 
        tfunc(i,j) // return of tfunc 
        &&    // if both statements are !=0, results 
           // in true, else in false 
a+=        // a = a + true or false is equal to 
           // a = a + 1 or 0 
+0

謝謝。我想了解更多,並在這一部分有更好的理解。這種編碼有沒有關鍵字? – kandleIce

+0

第一部分是按位操作。第二部分只是不好的編碼風格;)你也可以搜索邏輯運算符。 – izlin

+0

這個答案的第一部分是錯誤的 - 'b << 3^j'是'(b << 3)^ j'不是'b <<(3^j)'。 '<<'優先於'^'。 – Holt