2017-10-28 16 views
-3

Können Sie bitte helfen, diesen Code neu zu schreiben. Ich kann nicht verstehen, wie die bitweise Linkshift tatsächlich funktioniert. Wenn es eine einfachere Möglichkeit gibt, diesen Code darzustellen, lassen Sie es mich wissen.Darstellung des Codes (C)

Dieser Code ist die Anzahl von 1 (Einsen) in einer Bit-Darstellung einer Zahl zu berechnen.

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

Nein, Rechtsverschiebung wird Vorzeichen erweitert. Das Verschieben um mehr als die Anzahl der Bits ist nicht definiert. – wildplasser

+0

@yano - Bit-Shifting ein negativer Wert auf der linken Seite verursacht undefiniertes Verhalten; bit-shifting ein nicht negativer Wert nach links (solange das Ergebnis darstellbar ist) ist gut definiert. –

+0

ah, hoppla, es ist die '1', die verschoben wird, ich dachte' numchars' ... habe nicht genau genug geschaut – yano

Antwort

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; 
}