Forum: Compiler & IDEs unverständliche Zeile in C-Code


von c_anfänger (Gast)


Lesenswert?

Hallo,
ich bin gerade dabei mich in c einzuarbeiten und bei dabei auf folgende 
zeile gestoßen,
1
return(PINC & _BV(0) ? 1 : 0);
ich frage mich wann eine 1 und wann eine 0 retuniert wird.

von TestX .. (xaos)


Lesenswert?

if (PINC & _BV(0)){
return 1;
}else{
return 0;
}

^^

von MeinerEiner (Gast)


Lesenswert?

Wenn mich nicht alles täuscht, heisst das umgeschrieben einfach so:

[c]
if (PINC & _BV(0))
{
  1
}
else
{
  0
}
[/code]

von c_anfänger (Gast)


Lesenswert?

erstmal danke, ich bekomme also eine 1, wenn ich an den vierten PIN von 
PORTc 5v anlege?

von Sven P. (Gast)


Lesenswert?

Das Dingen schimpft sich Ternärer Operator. Geht so:

( (Bedingung) ? (Wahr-Wert) : (Falsch-Wert) )

von gast (Gast)


Lesenswert?

ich wage mal einen schuss ins blaue ^^

wenn an PORTC  der pin PB0   1 ist wird  1  zurückgegeben wenn PB0  0 
ist wird  0 zurückgegeben


das xxx  ?  1  : 0  ist glaube  wie eine

IF (xxxx)
   1 ;
else
  0;

von Philipp B. (philipp_burch)


Lesenswert?

c_anfänger schrieb:
> erstmal danke, ich bekomme also eine 1, wenn ich an den vierten PIN von
> PORTc 5v anlege?
1
return(PINC & _BV(0) ? 1 : 0);

Wie kommst du da auf den vierten Pin? _BV(x) ist nichts anderes als
1
1 << x
damit ergibt sich 1 << 0, bzw. ausgerechnet halt 1. Wenn du nun PINC 
damit maskierst, bleibt eine Eins übrig, wenn Bit 0 eine Eins liefert.

Noch was: Lass die Klammern um den ganzen Return-Ausdruck weg, return 
ist keine Funktion.

von Mike (Gast)


Lesenswert?

>ich wage mal einen schuss ins blaue ^^

Wohl eher in ein sehr dunkelblaues Etwas mit Schornstein dran.

>wenn an PORTC  der pin PB0   1 ist wird  1  zurückgegeben wenn PB0  0
>ist wird  0 zurückgegeben

Wäre das das Ding reif zum patentieren.

Wenn PB0 == Pin0 an PortB 1 wird...

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.