Wie überprüfe ich mit bitweisen Operatoren, ob eine ganze Zahl gerade oder ungerade ist?
Wie überprüfe ich mit bitweisen Operatoren, ob eine ganze Zahl gerade oder ungerade ist?
lebhafter Mann
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
}
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
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.
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