1.1b Bitschubserei

Synopsis: [MezData: Ausdrücke und Operatoren] [SPS-Logik-Simulation]

Hinweise: Zur Veranschaulichung habe ich hier unsigned char a; // 8 Bit ohne Vorzeichen verwendet. In den [] Klammern stehen Ausdrücke mit dem gleichen Effekt.

Bits verschieben (Bitshift)

Jede Stelle nach links schieben << multipliziert mit 2. Jede Stelle nach rechts schieben >> dividiert durch 2, Nachkommastellen werden abgeschnitten.

Ausdruckchar aErgebnis
a<<1 [= a*2] [= a*21]0b0000 1010 (10)0b0001 0100 (20)
a>>1 [= a/2] [= a/21]0b0000 0101 (5)0b0000 0010 (2)
a<<3 [= a*8] [= a*23]0b0000 1010 (10)0b0101 0000 (64+16=80)
a>>4 [= a/16] [= a/24]0b1111 1111 (255=0xFF)0b0000 1111 (15=0x0F)
Mit << und >> können Bits verschoben werden

Maskieren mit &

Ausdruckchar aErgebnis
a & 1 [= a%2]0b1111 1111 (255=0xFF)0b0000 0001 (1)
a & 3 [= a%4]0b1111 1111 (255=0xFF)0b0000 0011 (3)
a&0b1010 [= a&10]0b1111 1101 (253=0xFD)0b0000 1000 (8)
a&1<<2 [= a&0b100]0b1111 1111 (255=0xFF)0b0000 0100 (4)
Mit & können Bits maskiert, ausgeblendet werden

Bits setzen mit |, |=

Ausdruckchar aErgebnis
a|1 [= a|0b1]0b0000 00000b0000 0001 (1)
a|2 [= a|0b10]0b0000 0001 (1)0b0000 0011 (3)
a | 1<<1 [= a|0b10]0b0000 00000b0000 0010 (2)
a | 0b101<<2 [= a|0b10100] [= a | 5*4]0b0000 00000b0001 0100 (20)
Mit | können Bits gesetzt werden

Bits rücksetzen mit &, &=

Mit ~ werden die Bits im Ausdruck invertiert, dazu muss der Datentyp berücksichtigt werden, hier sind es 8 Bit, Beispiele für Datentypen:

  • 8 Bit: ~1 = 0xFE = 0b1111 1110
  • 16 Bit: ~1 = 0xFFFE = 0b1111 1111 1111 1110
  • 32 Bit: ~1 = 0xFFFFFFFE = 0b1111 1111 1111 1111 1111 1111 1111 1110
Ausdruckchar aErgebnis
a & ~1 [= a&~0b01] [= a & 0b1111 1110]0b1111 1111 (255=0xFF)0b1111 1110 (254=0xFE)
a & ~2 [= a&~0b10] [= a & 0b1111 1101]0b1111 1111 (255=0xFF)0b1111 1101 (253=0xFD)
a & ~(1<<3) [= a & ~0b1000] [= a & 0b1111 01111]0b1111 1111 (255=0xFF)0b1111 0111 (247=0xF7)
a & ~(0b101<<2) [= a & ~0b1 0100] [= a & 0b1110 1011]0b1111 1111 (255=0xFF)0b1110 1011 (235=0xEB)
Mit & und ~ können Bits zurückgesetzt werden

ToDo: Programm in Java, JavaScript, Python zur Überprüfung erstellen.