Hallo zusammen, ich shifte meine Bits hiermit an die richtige Stelle, allerdings ist das Bild bei meiner 8x8 Matrix dann Spiegel verkehrt. Kann mir jemand helfen? seg_schieb[zaehler] = ((segment[zaehler]&0x01)<<6) + ((segment[zaehler]&0x02)<<4) + ((segment[zaehler]&0x04)<<2) + ((segment[zaehler]&0x08)>>3) + ((segment[zaehler]&0x10)>>1) + ((segment[zaehler]&0x20)>>4) + ((segment[zaehler]&0x40)>>4) + ((~segment[zaehler])&0x80);
So vielleicht ;) ;(08x0&([ɹǝ1ɥǝɐz]ʇuǝɯbǝs~)) + (4>>(04x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + (4>>(02x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + (1>>(01x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + (3>>(80x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + (2<<(40x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + (4<<(20x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + (6<<(10x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) = [ɹǝ1ɥǝɐz]qǝıɥɔs_bǝs Sorry aber bei zu viel Bit-Schieberei krieg ich Kopfschmerzen :( Bei der Ausgabe den Index Rückwerts laufen lassen?
Frosch1502 schrieb: > ich shifte meine Bits hiermit an die richtige Stelle, passt nicht zu Frosch1502 schrieb: > allerdings ist das > Bild bei meiner 8x8 Matrix dann Spiegel verkehrt Tipp: die Zahlen hinter den << haben eine Bedeutung.
Das die Zahlen eine Bedeutung haben ist mir bewusst.. Ich schiebe sie allerdings spiegel verkehrt :D
Du schiebst Bit 00000001 << 6 = 01000000 00000010 << 4 = 00100000 00000100 << 2 = 00010000 00001000 << 3 = 01000000 // soll da wirklich so sein? Wenn die Bits rechts falsch sind, dann musst du die Wert nach dem << anpassen, bzw auch noch << durch >> ersetzen
Frosch1502 schrieb: > Ich schiebe sie allerdings spiegel verkehrt :D dann schieb sie doch an die richtigen Stellen
Walter schrieb: > dann schieb sie doch an die richtigen Stellen Hätte Er das wirklich selbst verbrochen, wüste Er auch wies ging. + ((~segment[zaehler])&0x80) + ((segment[zaehler]&0x40)<<4) + ((segment[zaehler]&0x20)<<4) + ((segment[zaehler]&0x10)<<7) + ((segment[zaehler]&0x08)<<5) + ((segment[zaehler]&0x04)>>6) + ((segment[zaehler]&0x02)>>4) + ((segment[zaehler]&0x01)>>2); Ohne Gewehr, Pistole und sonstigen Schweinkram. (Hab keinen Plan was ich da gemacht habe :)
Mir stellen sich immer die Nackenhaare auf wenn ich Quellcode sehe welcher Bits zusammenbastelt und dann + verwendet. Ein Programmierfehler und das Byte ist im Hintern, warum also nicht die dafür logisch richtige Funktion | nutzen? Dann haben Programmierfehler in den o.g. Beispiel keine Auswirkung, weil man dann gezielt die gewünschten Bits beeinflußt und eben nicht mit der Schrotflinte zusammenprügelt...
Thomas K. schrieb: > Dann haben Programmierfehler in den o.g. Beispiel > keine Auswirkung, wie das? Bits an der falschen Stelle sind mit | genauso falsch wie mit +
Walter schrieb: > wie das? Bits an der falschen Stelle sind mit | genauso falsch wie mit + Mit '+' ist es sozusagen 'noch falscher'. Der Fehler verschiebt sich an eine Stelle, die mit der Ursache möglicherweise gar nichts zu tun hat.
Thomas K. schrieb: > Mir stellen sich immer die Nackenhaare auf wenn ich Quellcode sehe > welcher Bits zusammenbastelt und dann + verwendet. avr-gcc macht merkwürdigerweise bei '+' meist besseren Code als bei '|'. Scheint eine (vernachlässigbare) Macke zu sein.
Frank M. schrieb: > Scheint eine (vernachlässigbare) Macke zu sein. Aber nur, wenn der Quellcode stimmt! Und wenn an der Art der Bitmanipulation in einem bestimmten Programmteil sich niemals was ändern wird. (Bit setzen, wo vorher schon eins war) Solange man sich noch nicht 100% sicher ist, was man tut, sollte man das '+' und die paar vielleicht eingesparten µs ganz schnell vergessen.
Teo D. schrieb: > ;(08x0&([ɹǝ1ɥǝɐz]ʇuǝɯbǝs~)) + > (4>>(04x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + > (4>>(02x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + > (1>>(01x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + > (3>>(80x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + > (2<<(40x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + > (4<<(20x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) + > (6<<(10x0&[ɹǝ1ɥǝɐz]ʇuǝɯbǝs)) = [ɹǝ1ɥǝɐz]qǝıɥɔs_bǝs HAHA sehr geil Teo! ;-)
hi, anstatt Bits zu shiften, benutzt lieber enums und structs. Mach dir lieber Gedanken über das Speichermodell dann erübrigt sich das shiften.
Gib's da nichts Schönes in C? In Assembler kann man die Bits rechts rausschieben (ins Carry) und links wieder rein. Nach 8 Schiebungen ist man fertig. Ein Stück Assembler in den C-Code einbauen? Wäre dann aber CPU-abhängier Code. Weil es eine Matrix ist, müsste man mit dem niedrigsten Index beim Auslesen anfangen und mit dem höchsten Index anfangen reinzuschreiben. Solder
Solder schrieb: > Gib's da nichts Schönes in C? Sicher! Man kann sich sogar das schönste aus den anderen 108 Threads zu diesem Thema hier auf µc-net raussuchen!
Ein Shift with Carry gibt es in c nicht. Eine Tabelle mit den Werten wäre sicher eine schnelle Variante.
Dirk B. schrieb: > Eine Tabelle mit den Werten wäre sicher eine schnelle Variante. Wer weiß woher der Mist kommt!?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.