Forum: Compiler & IDEs Benötige HIlfe bei Bitmanipulation


von M. H. (dbzwerg)


Lesenswert?

Hallo,

hab irgndwie nen Knoten im Kopf, darum brauch ich eure Hilfe.

Folgendes hab ich vor:

Die obersten 3 bit von PIND möchte ich als die untersten in der variable 
"temp" haben.
Zusätzlich möchte ich das 4te bit in "temp" auch noch setzen o. löschen, 
je nach zustand ( soll als flag dienen).

Zu 1. hab ich das so versucht:

temp = (PIND>>5);

soweit ok , aber wenn ich nun im späteren programmverlauf das vierte bit 
z.b. setze und dann wieder zum anfang mit der bitverschiebung komme, ist 
das 4bit wieder weg.


Nun brauch ich eure Hilfe( hab schon x-mal den artikel hier 
durchgelesen, aber ichs versteh/sehs einfach nicht).

MFG

von Rolf M. (rmagnus)


Lesenswert?

M. H. schrieb:
> soweit ok , aber wenn ich nun im späteren programmverlauf das vierte bit
> z.b. setze und dann wieder zum anfang mit der bitverschiebung komme, ist
> das 4bit wieder weg.

Du willst also, daß

> temp = (PIND>>5);

so geändert wird, daß es das Bit 4 von temp beibehält?
1
temp = (temp & (1 << 4)) | (PIND >> 5);

von M. H. (dbzwerg)


Lesenswert?

Hab das mal probiert...leider ohne erfolg, es wird trotzdem das 4te bit 
gelöscht, obwohl ichs vorher händisch gesetzt hab

von M. H. (dbzwerg)


Lesenswert?

M. H. schrieb:
> Hab das mal probiert...leider ohne erfolg, es wird trotzdem das 4te bit
> gelöscht, obwohl ichs vorher händisch gesetzt hab



Ok hat sich erledigt , hat naürlich funktioniert meinte aber das 4te bit 
, nicht bit 4  ;-)

Wie sieht denn der code aus wenn ich generell den rest der variable 
"temp" unangetastet lassen möchte?

von Klaus W. (mfgkw)


Lesenswert?

Z.B.:

temp &= 0b11111000;
temp |= PIND>>3;

von Klaus W. (mfgkw)


Lesenswert?

natürlich nicht um 3 shiften, sondern um 5...

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
Noch kein Account? Hier anmelden.