stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 275

Tag 275 von 365 · Experte · Monat 10: Bits und Daten

Bitweise: and, or, xor, nor, not

and, or, xor und nor arbeiten auf jedem Bit einzeln: Bits setzen, löschen, prüfen und umschalten mit Masken, dazu not und warum aus 0 dabei −1 wird.

Lektion 16 Min. Woche 40

Das lernst du heute

  • Bits setzen, löschen und prüfen
  • Masken
  • not und negative Zahlen

Gestern hast du gesehen, wie viele Bits in einer Zahl stecken. Heute setzt, löschst und prüfst du sie einzeln. Die Befehle kennst du seit Woche 4: and, or, xor und nor. Damals hast du sie mit 0 und 1 benutzt. Tatsächlich arbeiten sie auf jedem Bit einer Zahl einzeln.

Bit für Bit

BefehlBit im Ergebnis ist 1, wenn …
andbeide Bits 1 sind
ormindestens eins 1 ist
xorgenau eins 1 ist
norbeide 0 sind
notdas Bit 0 war (nur ein Eingang)
and r0 %1100 %1010   # %1000 = 8
or r1 %1100 %1010    # %1110 = 14
xor r2 %1100 %1010   # %0110 = 6

Masken

Eine Maske ist eine Zahl, deren 1-Bits sagen, welche Stellen dich interessieren. Damit gibt es vier Handgriffe:

ZielBefehlBeispiel für Bit 2
Bit setzenor mit Maskeor r0 r0 %100
Bit löschenand mit umgedrehter Maskenot m %100, dann and r0 r0 m
Bit prüfenand mit Maske, dann snezand r1 r0 %100
Bit umschaltenxor mit Maskexor r0 r0 %100

not und negative Zahlen

not dreht alle Bits um. Aus 0 wird nicht 1, sondern −1, denn „alle Bits 1“ bedeutet bei vorzeichenbehafteten Ganzzahlen −1. Aus 5 wird −6. Das ist kein Fehler: not x ist immer −x − 1.

Praktisch ist not für Löschmasken. not maske %100 liefert eine Zahl, in der nur Bit 2 null ist. and damit löscht genau dieses Bit, egal wie lang die Zahl ist:

not maske %100         # alle Bits 1 außer Bit 2
and wert wert maske    # Bit 2 gelöscht

nor x 0 ist übrigens dasselbe wie not x – beide Eingänge 0 heißt beim nor 1.

Achtung

Logisches und bitweises and sind derselbe Befehl. and r0 2 1 ergibt 0, obwohl beide Werte „wahr“ sind: 2 ist %10, 1 ist %01, kein Bit gemeinsam. Mit reinen 0/1-Werten verhält sich and logisch, mit anderen Zahlen nicht. Mach Wahrheitswerte deshalb vorher mit snez zu 0 oder 1.

Hinweis

Bitbefehle wandeln Kommazahlen vorher in Ganzzahlen um. 5,7 wird dabei zu 5 – der Nachkommaanteil fällt weg.

Schaubild

Die Registerbank des Chips r0 42 r1 31 r2 10 r3 -2.5 r4 0 r5 0 r6 0 r7 0 r8 0 r9 0 r10 0 r11 0 r12 0 r13 0 r14 0 r15 0 sp = r16 ra = r17 16 freie Register, je eine Zahl sp: Stapelzeiger · ra: Rücksprungadresse
Für Bitbefehle wird die Kommazahl in eine 64-Bit-Ganzzahl verwandelt, Bit für Bit verknüpft und zurückgewandelt.

Übung

Aufgabe

In wert (r0) steht ein Statuswort. Berechne mit Bitbefehlen:

  • gesetzt = wert mit Bit 2 gesetzt
  • geloescht = wert mit Bit 0 gelöscht (Maske mit not bauen)
  • geprueft = 1, wenn Bit 4 gesetzt ist, sonst 0
  • gekippt = wert mit Bit 1 umgeschaltet
  • umgedreht = alle Bits von wert umgedreht

Hinweise

Hinweis 1

Setzen mit or, umschalten mit xor, umdrehen mit not.

Hinweis 2

Löschen: not maske 1, dann and geloescht wert maske.

Hinweis 3

Prüfen: and mit %1_0000, dann snez.

Quiz

5 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.

Tag abschließen

  • Übung im Simulator bestanden
  • Quiz mit mindestens 60 % bestanden

Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.

Fehler in dieser Lektion melden

Zum Melden bitte anmelden. Anmelden

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall