Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| efinf:blc2016:lektion20160908 [2016/09/11 09:18] – created Ivo Blöchliger | efinf:blc2016:lektion20160908 [2016/09/11 09:21] (current) – [Donnerstag 8. September 2016] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | {{backlinks> | ||
| + | ==== Donnerstag 8. September 2016 ==== | ||
| + | |||
| + | === Logische Operationen, | ||
| + | * and, or, not | ||
| + | * xor, nand | ||
| + | |||
| + | ^ ^ and ^ or ^ not ^ xor ^ | ||
| + | ^ Logisch | && | < | ||
| + | ^ Bitweise | & | < | ||
| + | |||
| + | Ruby kennt auch noch die logischen Operatoren '' | ||
| + | |||
| + | === Shift-Operatoren === | ||
| + | Bits können nach links oder rechts verschoben werden. Das entspricht einer Multiplikation mit einer 2er Potenz (bzw. Division). Beim rechts verschieben " | ||
| + | <code ruby> | ||
| + | 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. | ||
| + | <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) | ||
| + | </ | ||
| + | |||
| + | **Aufgabe**: | ||
| + | <code ruby> | ||
| + | f = 0xff8020 | ||
| + | |||
| + | r = f >> 16 | ||
| + | g = (f >> 8) & 0xff | ||
| + | b = f & 0xff | ||
| + | </ | ||
| + | |||
| + | **Aufgabe**: | ||
| + | <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 | ||
| + | </ | ||
| + | |||
| + | {{ : | ||