Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{backlinks>.}} ==== Donnerstag 8. September 2016 ==== === Logische Operationen, Bitweise Operationen === * and, or, not * xor, nand ^ ^ and ^ or ^ not ^ xor ^ ^ Logisch | && | <nowiki>||</nowiki> | ! | <nowiki>^</nowiki> | ^ Bitweise | & | <nowiki>|</nowiki> | ~ | <nowiki>^</nowiki> | 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". <code ruby> 21 << 1 42 >> 2 </code> 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. <code ruby> 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) </code> **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. <code ruby> f = 0xff8020 r = f >> 16 g = (f >> 8) & 0xff b = f & 0xff </code> **Aufgabe**: 16-Bit Farbwerte (5+6+5 Bits, r,g,b). Umrechnungen <code ruby> # 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 </code> {{ :efinf:blc2016:img_20160908_tafel.jpg?direct&300 |Tafelbild}} efinf/blc2016/lektion20160908.txt Last modified: 2016/09/11 09:21by Ivo Blöchliger