Forum: Compiler & IDEs Warum sollte man Bits nicht mit "(0<<PB1)" löschen?


von tset5 (Gast)


Lesenswert?

Der Betreff sagt eigentlich alles. Ich habe bisher in Assembler 
programmiert und will nun auch C lernen. Also arbeite ich das 
GCC-Tutorial durch und habe mich natürlich gefragt, ob man Bits nicht 
auch mit "(0<<PB1)" löschen kann. Folglich habe ich das natürlich 
ausprobiert und es hat wunderbar funktioniert.
(AVR-Studio mit WIN-AVR)

Also warum wird das nirgendwo erwähnt? Ist das gegen irgendeine 
Spezifikation von C?

von XXX (Gast)


Lesenswert?

Eine 0 bleibt immer eine 0, egal wie oft und wie weit du sie schiebst.
Zeig mal den kompletten Befehl, den du verwendest. Ich schätze, du
löscht immer das komplette Byte.

Gruß
XXX

von Karl H. (kbuchegg)


Lesenswert?

tset5 schrieb:
> Der Betreff sagt eigentlich alles.

Weil du 0 um beliebig viele Stellen nach links verschieben kannst, das 
Ergebnis ist trotzdem immer noch 0

von Grrrr (Gast)


Lesenswert?

tset5 schrieb:
> habe mich natürlich gefragt, ob man Bits nicht
> auch mit "(0<<PB1)" löschen kann.

Bittschö der Herr, löschns dann jetzt die andern Bits. Ach, hams scho?
Dös wollt I garnet. Erst wo wenn I sag, sollns die löschn!

von Karl H. (kbuchegg)


Lesenswert?

tset5 schrieb:

> auch mit "(0<<PB1)" löschen kann. Folglich habe ich das natürlich
> ausprobiert und es hat wunderbar funktioniert.

Irrtum.
Du hast maximal das komplette Register auf 0 gesetzt, aber nicht ein 
einzelnes Bit

von tset5 (Gast)


Lesenswert?

Stimmt, war nur ne testschaltung, bei der ich auch nur ein Bit brauchte, 
also hab ich das nicht gleich bemerkt...

Hätte mich auch irgendwie gewundert, warum das so einfach gehen sollte 
und gleichzeitig nirgendwo erwähnt wird...

Danke für die Info, darauf bin ich irgendwie nicht gekommen.

von Grrrr (Gast)


Lesenswert?

tset5 schrieb:
> Danke für die Info, darauf bin ich irgendwie nicht gekommen.

Naja. Nicht so schlimm. Hätte ja auch ein Fehler in der C-Spezifikation 
sein können, nicht wahr? ;-)

von mitleser (Gast)


Lesenswert?

dieses Forum ist wohl nur zum Ingenieur-Gehälter-Trollen gut? Da stellt 
einer ne ordentliche Frage und man kommt ihm gleich mit der C-Spec. Soll 
ja auch Hobby-Anwender geben, oder Anfänger, oder welche, die nur nicht 
auf die Idee kommen, in so ne blöde Spec. zu sehen.

von Grrrr (Gast)


Lesenswert?

mitleser schrieb:
> dieses Forum ist wohl nur zum Ingenieur-Gehälter-Trollen gut? Da stellt
> einer ne ordentliche Frage und man kommt ihm gleich mit der C-Spec. Soll
> ja auch Hobby-Anwender geben, oder Anfänger, oder welche, die nur nicht
> auf die Idee kommen, in so ne blöde Spec. zu sehen.

Ich nehme die Bemerkung mit Bedauern zurück, verweise aber zusätzlich 
auf das Emoticon.

von sebastians (Gast)


Lesenswert?

Macht aber Sinn zu Dokumentationszwecken wenn man zeigen will, welche 
Bits man nicht setzt (nicht setzen ist was anderes als löschen!)
1
    ADCSRA = /* ADC Control and Status Register A */
2
          (1 << ADEN) /* ADC Enable */
3
        | (1 << ADSC) /* ADC Start Conversion */
4
        | (1 << ADIE) /* ADC Interrupt Enable */
5
        /* ADPS2...ADPS0 ADC Prescaler Select Bits = 1 0 0,
6
         * Bei 1MHz, Faktor 16 = 62,5kHz, 16us */
7
        | (1<< ADPS2) 
8
        | (0<< ADPS1) 
9
        | (0<< ADPS0) 
10
        ;
oder wenn das Bit variabel ist
1
    ADMUX = /* ADC Multiplexer Select Register */
2
        /* REFS1...REFS0 (ReferenceSelection Bits) = 0 --> Externes AREF */        
3
        /* MUX4...MUX0 = 6 + (bool)adc_channel*/
4
        (1 << MUX2) | (1 << MUX1) | (adc_channel << MUX0);

von John S. (student)


Lesenswert?

mitleser schrieb:
> dieses Forum ist wohl nur zum Ingenieur-Gehälter-Trollen gut? Da stellt
> einer ne ordentliche Frage und man kommt ihm gleich mit der C-Spec. Soll
> ja auch Hobby-Anwender geben, oder Anfänger, oder welche, die nur nicht
> auf die Idee kommen, in so ne blöde Spec. zu sehen.

Du sprichst mir von der Seele:

Es gibt leider nur wenige, die vernünftig antworten.

Wenn man alles in der Literatur nachlesen kann (was durchaus geht), 
braucht man eigentlich dieses Forum nicht mehr. Ich poste ja exakt in 
diesem Forum, weil ich entweder nicht weiß, wo ich suchen soll oder weil 
ich etwas nicht verstanden habe.

Vom Leitsatz " ... es gibt keine dummen Fragen ..." sind die meisten 
Forumsteilnehmer hier weit entfernt.

Die Antworten, die vorab hier gegeben worden sind, sind zwar meist 
richtig,  kann man nur verstehen, wenn man kein Anfänger ist. Alle wenig 
hilfreich. Glaube nicht, dass tset5 seine Frage zufriedenstellend 
(einfach) beantwortet findet.

Grüße

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

John Schmitz schrieb:

> Vom Leitsatz " ... es gibt keine dummen Fragen ..." sind die meisten
> Forumsteilnehmer hier weit entfernt.

Dieser "Leitsatz" ist kompletter Schwachfug. Natürlich gibt es dumme 
Fragen.

Beachte aber bitte, dass sich meine Antwort lediglich auf Deine 
allgemeine Aussage bezieht - nicht auf die Frage von tset5 ;-)

Gruß,

Frank

von John S. (student)


Lesenswert?

Frank M. schrieb:
> John Schmitz schrieb:
>
>> Vom Leitsatz " ... es gibt keine dummen Fragen ..." sind die meisten
>> Forumsteilnehmer hier weit entfernt.
>
> Dieser "Leitsatz" ist kompletter Schwachfug. Natürlich gibt es dumme
> Fragen.
>
> Beachte aber bitte, dass sich meine Antwort lediglich auf Deine
> allgemeine Aussage bezieht - nicht auf die Frage von tset5 ;-)
>
> Gruß,
>
> Frank

http://de.wikipedia.org/wiki/Benutzer:Schwachfug

von Klaus (Gast)


Lesenswert?

John Schmitz schrieb:
> Vom Leitsatz " ... es gibt keine dummen Fragen ..."

Du vergisst die Tatsache, dass dieser Leitsatz nur für Kinder gilt! 
Manche Erwachsene bekommen dann halt nicht mit, dass von ihnen erwartet 
wird, dass sie sich weiter entwickeln. Denn als Erwachsener Mensch kann 
man sehr wohl dumme Fragen stellen, und dann auch dumme antworten 
bekommen.

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.