2017-10-28 67 views
-3

您可以請幫助重新編寫此代碼。我無法理解按位左移實際如何工作。如果有更簡單的方法來表示此代碼,請讓我知道。代表(C)

此代碼用於計算數字的位表示中的1(個)的數量。

int numberofones(int value, int count) { 

    int numchars = 8 * sizeof(int); 
    int n; 

    for(n = 0; n < numchars; n++) 
    { 
    if(value & (1 << (numchars - 1 - n))) { 
    count++; 
    } 
    } 
    return count; 
} 
+0

否,右移位符號擴展。移位超過位數不確定。 – wildplasser

+0

@yano - 將負值向左移位會導致未定義的行爲;將一個非負值向左移位(只要結果是可表示的)是明確的。 –

+0

啊,哎呀,這是'1'轉移,我正在考慮'numchars' ..沒有足夠接近 – yano

回答

0
int numberofones(int value) { 

    int numchars = 8 * sizeof(int); 
    int n; 
    int count = 0 ; 

    for(n = 0; n < numchars; n++) 
    { 
    if(value & (1 << n)) 
     count++; 
    } 
    return count; 
}