Bits spiegeln / C

Gast #4611236
Lesenswert?

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);
#4611248
Lesenswert?

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?
#4611611
Lesenswert?

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 :)
#4611634
Lesenswert?

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...
#4611768
Lesenswert?

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.
Gast #4611773
Lesenswert?

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! ;-)
Gast #4611941
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren