PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist der Unterschied zwischen &= |= und der vorg. Til



popi
13.06.2006, 18:36
Hallo zusammen,

ich habe hier ein Programm, welches ich als erstes Projekt für einen Mega64 übernehmen will.

Nun sind da diese Operatoren und ich weiss nicht, wie diese so funktioniren.

Laut dem AVR-GCC Tutorial konnte ich folgendes lesen:

x |= (1 << Bitnummer); // wird ein Bit in x gesetzt
x &= ~(1 << Bitnummer); // wird ein Bit in x geloescht

Nun, das erste Beispiel ist logisch.
Ich mache eine ODER-Verknüpfung mit einem Bestimmten Bit und egal was vorhin drinstand, 1 ODER 1 = 1 und somit wird der Bit gesetzt.

Nun verstehe ich das zweite Beispiel nicht.
Warum wird eine 1 negiert (ich vermute, das die Tilde negiert!), und dann mit UND Verknüpft? Kann man denn nicht gleich eine Null nehmen?
Also x &= (0 << Bitmuster) ???

Und jetzt die Meisterfrage ;o) Wie ist denn der Syntax zu verstehen; Also wie liest man den Befeht richtig? Für welchen deutschen Ausdruck stehen denn die << Zeichen.

Danke im Voraus und Grüße

popi[/url]

PicNick
13.06.2006, 20:02
<< = Bitweises schieben links
>> = Bitweises schieben lrechts
deswegen ist auch (0<<zahl) sinnlos: einen nuller kannst du nicht schieben, der bleibt null. Null-mal schieben ist aber ok.
(1<<0) = 00000001
(1<<1) = 00000010
(1<<2) = 00000100
...
(1<<7) = 10000000
Beispiel (x=0):
x |= (1<<2) 0 oder 4 --> 4

Beispiel (x=FF):

x &= ~(1<<2)

1: (1<<2) --> 0000010
2: ~(1<<2) --> 11111011
3: in x bleiben nur die Bits über, die in beiden werten auf 1 stehen, logo

hilft das ?

linux_80
13.06.2006, 20:02
Hallo,

hast DU schon gesucht wie das logische AND funktioniert ?

Wenn Du nur ein Bit löschen willst, müssen alle andern auf 1 sein, damit sie unverändert bleiben !
Am einfachsten geht das, wenn man ein Bit setzt, mit (1 << Bitnummer) und dann das ganze negiert, denn dann ist das eine Bit 0 und alle anderen 1.

Das << ist ein Shift Left, also verschieben nach links.
Eine 1 ist im Bit ganz rechts, deshalb wird hier immer nur nach links verschoben.

Wenn man allerdings eine 0 um eine gewisse Anzahl stellen nach links schiebt, bleibt das 0.

popi
13.06.2006, 20:37
Ich danke Euch für erste...

Ich habs verstanden.
Schön erklärt, vielen Dank!

Werde jetzt ein bißchen damit rumprobieren.

Liebe Grüß

popi