{{backlinks>.}}
==== Donnerstag 8. September 2016 ====
=== 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
{{ :efinf:blc2016:img_20160908_tafel.jpg?direct&300 |Tafelbild}}