Forum: PC-Programmierung Logische Verknüpfungen in C


von Thomas E. (bolv-1)


Lesenswert?

Hallo, ich habe ein Verständnissproblem bei folgendem Auschnitt eines 
C-Programms:

int g;
int x = 7, y = 8;

g = !(x&&y)

Meine Frage liegt jetzt darin:
g soll ja einen Wert 0 oder 1 liefern. Wenn ich 7(binär:0111) und 
8(binär1000) verunde erhalte ich doch 0000 und dann noch negiert wegen 
dem !, heißt für g = 1111. Aber voher weiß ich jetzt ob das true 1 oder 
false 0 ist ?

Ich hoffe jemand kann mir das kurz erklären.
Vielen Dank!

Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas E. schrieb:
> Hallo, ich habe ein Verständnissproblem bei folgendem Auschnitt eines
> C-Programms:
>
> int g;
> int x = 7, y = 8;
>
> g = !(x&&y)
>
> Meine Frage liegt jetzt darin:
> g soll ja einen Wert 0 oder 1 liefern. Wenn ich 7(binär:0111) und
> 8(binär1000) verunde erhalte ich doch 0000

aufpassen!
Das ist kein bitweises und sondern ein logisches Und.


7 ist nicht gleich 0 und daher logisch TRUE
8 ist nicht gleich 0 und daher logisch TRUE

TRUE && TRUE  ergibt wieder TRUE.
Und die Negierung davon ergibt FALSE


In der "Vorwärtsrichtung"
  Alles was 0 ist, ist logich FALSE. Alles ungleich 0 gilt als TRUE

In der "Rückwärtsrichtung"
  FALSE wird als 0 dargestellt
  TRUE  wird als 1 dargestellt

  !FALSE ergibt also 1

von Peter II (Gast)


Lesenswert?

Thomas E. schrieb:
> Wenn ich 7(binär:0111) und
> 8(binär1000) verunde erhalte ich doch 0000

das macht du aber nicht  && != &

von Thomas E. (bolv-1)


Lesenswert?

Karl Heinz Buchegger schrieb:

>
> 7 ist nicht gleich 0 und daher logisch TRUE
> 8 ist nicht gleich 0 und daher logisch TRUE
>
> TRUE && TRUE  ergibt wieder TRUE.
> Und die Negierung davon ergibt FALSE
>
>
> In der "Vorwärtsrichtung"
>   Alles was 0 ist, ist logich FALSE. Alles ungleich 0 gilt als TRUE
>
> In der "Rückwärtsrichtung"
>   FALSE wird als 0 dargestellt
>   TRUE  wird als 1 dargestellt
>
>   !FALSE ergibt also 1

Ok! ich glaube ich habe es vertanden. Ein weiteres Beispiel: h = D || 0 
müsste doch True ergeben oder? Da D nicht gleich 0 also True und dann 
True || False ergibt True?

von Karl H. (kbuchegg)


Lesenswert?

Thomas E. schrieb:

> Ok! ich glaube ich habe es vertanden. Ein weiteres Beispiel: h = D || 0
> müsste doch True ergeben oder? Da D nicht gleich 0 also True und dann
> True || False ergibt True?

Wenn D tatsächlich ungleich 0 ist, dann ja.

von Thomas E. (bolv-1)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Thomas E. schrieb:
>
>> Ok! ich glaube ich habe es vertanden. Ein weiteres Beispiel: h = D || 0
>> müsste doch True ergeben oder? Da D nicht gleich 0 also True und dann
>> True || False ergibt True?
>
> Wenn D tatsächlich ungleich 0 ist, dann ja.

Danke dir!
D soll eine Hex.zahl sein also Dezimal 13

von Karl H. (kbuchegg)


Lesenswert?

Thomas E. schrieb:
> Karl Heinz Buchegger schrieb:
>> Thomas E. schrieb:
>>
>>> Ok! ich glaube ich habe es vertanden. Ein weiteres Beispiel: h = D || 0
>>> müsste doch True ergeben oder? Da D nicht gleich 0 also True und dann
>>> True || False ergibt True?
>>
>> Wenn D tatsächlich ungleich 0 ist, dann ja.
>
> Danke dir!
> D soll eine Hex.zahl sein also Dezimal 13

Dann schreibs bitte in der C üblichen Notation 0xD oder 0x0D

Ansonsten verwechselt man das mit Variablennamen.

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.