Software > Coding

CC65: Bitmanipulation

(1/2) > >>

matashen:
Hi zusammen,

steh vor der nächsten Hürde, die mich auf regulären System kaum juckt.
Speichersparen!

Und zwar möchte ich verschiedene Informationen in ein Word(16-Bit) packen.

also ein boolsches bit
und drei 5-Bit (da werte von 0..31)

Wie mach ich das ??

Gruß Matthias

tuxie:
Hi,

da kann ich dir sicher helfen aber irgendwie verstehe ich deine Frage nicht so ganz. Möchtest du Bits in einem Register ändern oder so?

Dafür mußt du Logische Verknüpfung verwenden. Bsp.

Wenn du ein Bit setzen möchtest, dann nutzt du ODER Verknüpfung, möchtest du ein Bit löschen dann UND.

Register enthält 0b00001000

Register = Register ODER 0b00000100

0b00001000
0b00000100
__________
0b00000110

Bei UND

0b00001000
0b00000100
__________
0b00000000

Das ganze geht natürlich auch Hexadezimal, ist klar. Einfach dafür den HEX wert nehmen. Ich nehme immer den Windows Taschenrechner zum umrechnen oder auch im Kopf.

matashen:
Also das scheint jetzt an meiner Frage vorbei zu gehen:

Es liegen zum Beispiel die Werte so vor:

var1 10111 (5 Bit)
var2 01100 (5 Bit)
var3 10001 (5 Bit)
var4 1 (1Bit)

und sollen dann so in das Word gelegt werden

10111 01100 10001 1 (16 Bit)

später möcht ich das natürlich wieder zurück lesen
mit & und | kommt mir das etwas seltsam vor, vor allem wie bekomm ich damit die Bits an die richtige Position in der Variable?

Muss ich da sowas machen wie

meine16bit=0;
meine16bit=meine16bit+var1;
shl(5);
meine16bit=meine16bit+var2;
shl(5);
meine16bit=meine16bit+var3;
shl(5);
meine16bit=meine16bit+var4;

und wenn ich das so mache, wie geht das dann in umgekehrter Reihenfolge?

Gruß Matthias

tuxie:
Weiß nicht ob dir das weiter hilft. Denke STichwort wäre bitverschiebung
#
http://pronix.linuxdelta.de/C/standard_C/c_programmierung_9.shtml

matashen:
Also,

wie ich gedacht habe gehts mit Shifts,

aber wie lös ich oben genanntes Beispiel zurück.

Wie kann ich 16Bit auf 3x5 und 1x1 Bit zerlegen.
Ich denke es geht auch mit shifts, aber kann mir da jemand kurz nen Codeschnipsel zu meinem Beispiel geben.

Gruß Matthias

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln