Logische Operationen, Bitweise Operationen

  • and, or, not
  • xor, nand
and or not xor
Logisch && || ! ^
Bitweise & | ~ ^

Ruby kennt auch noch die logischen Operatoren and, or und not, die eine tiefere Präzedenz als (fast) alle anderen Operatoren haben. In if-Abfragen sind die Operatoren in der Tabelle zu verwenden (sonst muss geklammert werden).

Shift-Operatoren

Bits können nach links oder rechts verschoben werden. Das entspricht einer Multiplikation mit einer 2er Potenz (bzw. Division). Beim rechts verschieben “fallen” Bits rechts “heraus”.

21 << 1
42 >> 2

Beispiel: Gegeben drei natürliche Zahlen r,g,b zwischen 0 und 255 (Farbwerte). Diese Werte sollen in eine einzige Zahl (24-Bit) codiert werden, so dass r das höchstwertige Byte ist.

r = 123
g = 12
b = 211
 
# Lösung 1:
f = 256*256*r + 256*g + b
puts f.to_s(16)
# Lösung 2:
f = r << 16 | g << 8 | b
puts f.to_s(16)

Aufgabe: Gegeben ist f, eine 24-Bit Zahl. Extrahieren Sie die 3 Bytes r,g,b, wobei r das höchstwertige Byte ist. Lösen Sie die Aufgabe einmal mit Arithmetik, einmal mit Bit-Manipulationen.

f = 0xff8020
 
r = f >> 16
g = (f >> 8) & 0xff
b = f & 0xff

Aufgabe: 16-Bit Farbwerte (5+6+5 Bits, r,g,b). Umrechnungen

# Kodierung:
r = 23    #Max 31
g = 43    #Max 64
b = 12    #Max 31
 
f = b | (g << 5) | (r << 11)
 
# Dekodierung
 
r = f>>11
g = (f >> 5) & 0b11_1111
b = f & 0b1_1111

Tafelbild

  • efinf/blc2016/lektion20160908.txt
  • Last modified: 2016/09/11 11:21
  • by Ivo Blöchliger