Ich habe stundenlang über dieses Problem nachgedacht. Hier ist es:
Schreiben Sie einen Ausdruck, der 1 zurückgibt, wenn eine gegebene ganze Zahl "x" irgendwelche Bits hat, die gleich 1 sind. Geben Sie andernfalls 0 zurück.
Ich verstehe, dass ich im Grunde nur versuche herauszufinden, ob x == 0 ist, weil das der einzige Int ist, der keine 1 Bits hat, aber ich kann keine Lösung finden. Sie dürfen keine traditionellen Kontrollstrukturen verwenden. Sie können bitweise Operatoren, Addition, Subtraktion und Bitverschiebungen verwenden. Vorschläge?
Maskiere jedes der Bits einzeln, verschiebe sie alle in die lsb Position und oder zusammen.
Sie könnten einfach Ihre int
auf eine bool
umwandeln. Aber ich bezweifle, dass das der Zweck deiner Hausaufgaben ist; -)
0 || number - das gibt nur 0 zurück, wenn die Zahl 0 ist und gibt 1 zurück, wenn die Zahl eine andere Zahl als 0 ist. Da eine Zahl ohne irgendein Bit wie 1 gleich 0 ist, müssen wir sie mit 0 überprüfen.
Bitweises UND mit 0 und eine beliebige Zahl müssen gleich Null sein, aber der einzige idiotensichere Test wäre mit 0xFFFF, oder jedes Bit wird gesetzt. Um alle Bits zu setzen, sollten Sie einen int Zeichen haben und es -1 zuweisen. Sie haben dann ein int mit allen Bits auf 1 gesetzt, unabhängig von der Größe.
Also meine Antwort wäre bitweise UND mit -1
In der C-Sprache wird jeder andere Wert als NULL (entweder positiv oder negativ) als WAHR behandelt. Und es sollte eine Bedingung geben, um zu überprüfen, ob die Lösung Ihrer Frage eine NULL oder EINE (oder eine andere als NULL) zurückgibt. Daher ist diese Antwort perfekt gemäß Ihrer Anforderung. Dies verwendet nur bitweise Operatoren.
%Vor%Diese Zeile gibt NULL zurück, wenn keines der Bits in "x" 1 ist, und gibt Non-Zero (TRUE in einer Richtung) zurück, wenn eines der Bits 1 in "x" ist.
Tags und Links c bit-manipulation bitwise-operators