Wie kann ich alle Bits auf ‚1‘ in einer binären Zahl einer unbekannten Größe?

StackOverflow https://stackoverflow.com/questions/818535

  •  03-07-2019
  •  | 
  •  

Frage

Ich versuche, eine Funktion bei der Montage schreiben (aber lasse sprachunabhängig für die Frage übernehmen).

Wie kann ich Bitoperatoren alle Bits eines in Nummer 1 geführt setzen?

Ich weiß, dass ich das bitweise verwenden können „oder“ mit einer Maske mit den Bits I einstellen wollen, aber ich weiß nicht, wie eine Maske basierend off einige eine binäre Zahl von N Größe zu konstruieren.

War es hilfreich?

Lösung

~ (x & 0)

x & 0 wird immer in 0 führen, und ~ werden alle Bits auf 1 Sekunde drehen.

Andere Tipps

Stellen Sie sich auf 0, dann drehen Sie alle Bits auf 1 mit einem bitweise NOT.

Sie gehen, dass Sie bei der Montage finden Sprache wird die Größe eines „bestand in Nummer“ kennen. Und in Assemblersprache zählt es wirklich die Maschine die Assembler-Sprache ist für.

, dass die Informationen gegeben, könnten Sie fragen, entweder

  • Wie richte ich ein Integer-Register für alle 1-Bits?

oder

  • Wie fülle ich einen Bereich im Speicher mit allen 1 Bits?

Um ein Register mit allen 1 Bits zu füllen, auf den meisten Maschinen die effiziente Art und Weise nimmt zwei Anweisungen:

  1. Löschen des Registers, entweder mit einem speziellen Zweck klare Anweisung, oder laden sofort 0 oder xor das Register mit sich selbst.

  2. Nehmen Sie das bitweise Komplement des Registers.

Filling-Speicher mit 1 Bits dann erfordert 1 oder mehr Speicherbefehle ...

Sie werden viel mehr Bit-Fummeln Tipps und Tricks in Hank Warrens wunderbares Buch Hackers Delight finden.

Set x 1

Während x

Antwort = Zahl oder x -. 1

Der Code setzt voraus, Ihre Eingabe wird „Nummer“ bezeichnet. Es sollte in Ordnung für positive Werte arbeiten. Hinweis für negative Werte, die Zweien sind ergänzen die Operation Versuch macht keinen Sinn, da das hohe Bit wird immer sein.

Setzen Sie ihn auf -1. Dies wird in der Regel von allen Bits dargestellt 1 ist.

Mit T(~T(0)).

Wo T ist der Typname (wenn wir über C ++ sprechen.)

Dies verhindert die unerwünschte Werbung int, wenn der Typ kleiner als int ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top