Wie überprüfe ich mit bitweisen Operatoren, ob eine ganze Zahl gerade oder ungerade ist?

Lesezeit: 2 Minuten

Benutzeravatar von Brisk Man
lebhafter Mann

Wie überprüfe ich mit bitweisen Operatoren, ob eine ganze Zahl gerade oder ungerade ist?

Benutzeravatar von TJ Crowder
TJ Crowder

Überlegen Sie, was „gerade“ und „ungerade“ in „Bit“-Begriffen bedeutet. Da binäre ganzzahlige Daten mit Bits gespeichert werden, die Vielfache von 2 angeben, entspricht das niedrigstwertige Bit 20was natürlich 1 ist, während alle Sonstiges Bits entsprechen Vielfachen von 2 (21 = 2, 22 = 4 usw.). Unentgeltliche ASCII-Kunst:

NNNNNNNN
||||||||
|||||||+−− bit 0, value =   1 (20)
||||||+−−− bit 1, value =   2 (21)
|||||+−−−− bit 2, value =   4 (22)
||||+−−−−− bit 3, value =   8 (23)
|||+−−−−−− bit 4, value =  16 (24)
||+−−−−−−− bit 5, value =  32 (25)
|+−−−−−−−− bit 6, value =  64 (26)
+−−−−−−−−− bit 7 (highest order bit), value = 128 (27) for unsigned numbers,
                 value = -128 (-27) for signed numbers (2's complement)

Ich habe dort nur 8 Bits gezeigt, aber Sie bekommen die Idee.

Ob eine ganze Zahl gerade oder ungerade ist, kann man also nur am niederwertigsten Bit erkennen: Ist es gesetzt, ist die Zahl ungerade. Wenn nicht, ist es gerade. Sie kümmern sich nicht um die anderen Bits, weil sie alle Vielfache von 2 bezeichnen und daher den Wert nicht ungerade machen können.

Das Weg Sie sehen sich dieses Bit an, indem Sie den UND-Operator Ihrer Sprache verwenden. In C und vielen anderen Sprachen, die syntaktisch von B (ja, B) abgeleitet sind, ist dieser Operator &. In BASICs ist es normalerweise And. Sie nehmen Ihre ganze Zahl UND mit 1 (was eine Zahl ist, bei der nur das niederwertigste Bit gesetzt ist), und wenn das Ergebnis ungleich 0 ist, wurde das Bit gesetzt.

Ich bin absichtlich nicht den Code hier tatsächlich anzugeben, nicht nur, weil ich nicht weiß, welche Sprache Sie verwenden, sondern weil Sie die Frage “Hausaufgaben” markiert haben. 🙂

In C (und den meisten C-ähnlichen Sprachen)

if (number & 1) {
  // It's odd 
}

Benutzeravatar von TM
TM

if (number & 1)
    number is odd
else // (number & 1) == 0
    number is even

Nehmen wir zum Beispiel die ganze Zahl 25, die ungerade ist. In binär ist 25 00011001. Beachten Sie, dass das niedrigstwertige Bit b0 ist 1.

00011001    
00000001   (00000001 is 1 in binary)
       &
--------
00000001

Benutzeravatar von neontapir
Neontapir

Nur eine Fußnote zu Jims Antwort.

Anders als in C gibt in C# bitweises UND die resultierende Zahl zurück, also würden Sie schreiben wollen:

if ((number & 1) == 1) {
   // It's odd
}

if(x & 1)                               // '&' is a bit-wise AND operator
    printf("%d is ODD\n", x);
else
    printf("%d is EVEN\n", x);

Beispiele:

    For 9:

      9 ->        1 0 0 1
      1 ->     &  0 0 0 1
      -------------------
      result->    0 0 0 1

9 UND 1 ergibt also 1, da das rechte Bit jeder ungeraden Zahl 1 ist.

     For 14:

       14 ->      1 1 1 0
       1  ->   &  0 0 0 1
       ------------------
       result->   0 0 0 0

14 UND 1 ergibt also 0, da das rechte Bit jeder geraden Zahl 0 ist.

Benutzeravatar von TLama
TLama

Auch in Java müssen Sie verwenden if((number&1)==1){//then odd}weil in Java und C# ähnlichen Sprachen die int wird nicht gecastet boolean. Sie müssen die Vergleichsoperatoren verwenden, um a zurückzugeben boolean Wert dh true und false Im Gegensatz zu C- und C++-ähnlichen Sprachen, die Werte ungleich Null behandeln true.

Sie können dies einfach mit bitweisem UND tun & Operator.

if(num & 1)
{
    //I am odd number.
}

Lesen Sie hier weiter – Überprüfen von geraden ungeraden mit bitweisem Operator in C

1416550cookie-checkWie überprüfe ich mit bitweisen Operatoren, ob eine ganze Zahl gerade oder ungerade ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy