Forum: Compiler & IDEs Frage zu C Syntax


von Constantin K. (Gast)


Lesenswert?

Hallo Experten,

ich verstehe den Unterschied zwischen & und && bzw, | und || nicht 
wirklich. Ist es nicht egal wie oft ich "UND"-Verknüpfe?

Verstehe ich es richtig, dass & identisch ist mit && und eigentlich auch 
mit &&& etc...? Also der Compiler macht immer das Gleiche draus, aber 
man schreibt wegen der Lesbarkeit in gutem C-Stil das einfache & bei 
Bitmanipulationen und das doppelte && z.B. bei If-Abfragen?

Über eine Aufklärung wäre ich dankbar, ich suche seit Stunden Fehler...

Danke
Consti

von (prx) A. K. (prx)


Lesenswert?

Constantin K. schrieb:

> ich verstehe den Unterschied zwischen & und && bzw, | und || nicht
> wirklich. Ist es nicht egal wie oft ich "UND"-Verknüpfe?

1 & 2 == 0;   - weil bitweises AND
1 && 2 == 1;  - weil beide != 0

> dass & identisch ist mit &&
> Also der Compiler macht immer das Gleiche draus

Keineswegs.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

&, | sind Bitweise Verknüpfungen von Variablen / Werten.
&&, || ist das Äquivalent in TRUE/FALSE Prüfungen, wie z.B. while, for, 
if. Damit werden Ausdrücke miteinander Verglichen, und das Ergebnis ist 
TRUE oder FALSE.

if(a && b) ==> a und b müssen 1 (oder grösser, also ungleich 0) sein für 
TRUE
if(a&b)    ==> die UND Verknüpfung von a und b muss 1 (oder grösser, 
also ungleich 0) sein für TRUE

von Tom M. (Gast)


Lesenswert?

Constantin K. schrieb:
> Über eine Aufklärung wäre ich dankbar, ich suche seit Stunden Fehler...

Such lieber mal dein C Buch, da stehen solche Dinge nämlich drin! Das 
gehört zu den Grundlagen.

von immer wieder (Gast)


Lesenswert?


von Random .. (thorstendb) Benutzerseite


Lesenswert?

teste das doch einfach mal:
unsigned int a = 0xff & 0x0f;
unsigned int b = 0x0a | 0x50;
und schau im Debugger, was rauskommt :-)

von Gert (Gast)


Lesenswert?


von surfer (Gast)


Lesenswert?

Er fragt doch nur ganz offen und ehrlich, schade dass nicht alle 
Antworten hilfreich waren. Es kann ja schließlich nicht jeder 
Elektrotechnik studiert haben oder wenigstens Elektroniker sein!!

Constantin, bitte poste doch mal deinen Quellcode, dann helfe ich gerne 
direkt an deinem Code!

Was hast Du denn vor? Wird das ein Projekt oder programmierst du zum 
ersten Mal?

von P. M. (o-o)


Lesenswert?

Tom M. schrieb:
> Such lieber mal dein C Buch, da stehen solche Dinge nämlich drin! Das
> gehört zu den Grundlagen.

Und hier darf man keine Grundlagenfragen stellen oder wie?

von egbert (Gast)


Lesenswert?

Die Syntax ist bei den C-Elaboraten ohnehin vernachlässigbar, da der 
Compiler nach dem Zufallsprinzip meist nicht funktionsfähigen Code 
erzeugt.

C ist immer dann das Mittel zum Zweck, wenn einem Funktion und Ergebnis 
des Programms egal sind.

von gffdg (Gast)


Lesenswert?

@egbert
Nur wenn man keine Ahnung hat...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Random ... schrieb:
> if(a && b) ==> a und b müssen 1 (oder grösser, also ungleich 0)
Lass das "1 (oder größer" weg, dann stimts. Denn das Ergebnis darf 
abhängig vom Datentyp auch negativ (also kleiner 0) sein, damit diese 
Bedingung wahr ist. Es reicht aus, wenn der Wert in der if-Abfrage 
ungleich 0 ist.

gffdg schrieb:
> @egbert
> Nur wenn man keine Ahnung hat...
Ich sehe das als schrullige, fatalistische Satire an. Nur der Smiley 
fehlt...

P. M. schrieb:
> Und hier darf man keine Grundlagenfragen stellen oder wie?
Doch, aber man könnte ja auch einfach mal vorher im Forum suchen, ob 
jemand schon mal die selbe Frage gestellt hat. Oder eines der unzähligen 
Tutorials im weltweiten Web durcharbeiten. Oder tatsächlich ein Buch 
kaufen...
Für C gilt nach wie vor: K&R Programmieren in C, wobei hier die 
englische Originalausgabe besser ist als die deutsche Übersetzung...

Denn das eigentliche Problem liegt darin, was
Constantin K. schrieb:
>>>> ich suche seit Stunden Fehler...
Du hättest also besser deinen fehlerhaften Code geposted und dann 
Fragen dazu gestellt.
Und auch surfer schrieb:
>> Was hast Du denn vor?

von Oliver (Gast)


Lesenswert?

P. M. schrieb:
> Und hier darf man keine Grundlagenfragen stellen oder wie?
1
Forum: GCC
2
3
Fragen zu den GNU-Toolchains für AVR-, ARM- und MSP430-Mikrocontroller, AVR-GCC, MSPGCC, WinAVR, WinARM, ...

So steht es in der Berschreibung zu Sinn und Zweck dieses Forums (gcc).

Bei Anfängerfragen der Art "was bedeuetet &&" gibt es dan dann halt 
hilfreiche links zu weiterführenden Informationen (Sprich: C-Buch).

Oliver

von Klaus W. (mfgkw)


Lesenswert?

Es kann nicht der Sinn eines Forums sein, jedem das vorzulesen, was in 
jedem Buch steht - nur weil manche zu faul sind, selber ein Buch 
aufzuschlagen oder zu blöd für google sind.

Aus jedem halbwegs brauchbaren Werk zu C geht hervor, daß & und && nicht 
dasselbe sind.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klaus Wachtler schrieb:
> Aus jedem halbwegs brauchbaren Werk zu C geht hervor, daß & und && nicht
> dasselbe sind.

Anders formuliert:
Dinge, die sich als "Werk zu C" begreifen, aus denen das nicht 
hervorgeht, gehören nach /dev/null.

von Rene H. (Gast)


Lesenswert?

Klaus,

was ist denn der Sinn und Zweck des Forums?

Wenn jemand im Job neu ist und eine Frage stellt die für Dich in sich 
selbstverständlich und Klar ist, gibst Du auch die Antwort "es kann 
nicht Sinn und Zweck .....?"

Constantin hat eine legitime Frage gestellt, eine Frage die wir uns auch 
mal alle gestellt haben, wenn es auch lange hin ist.

Grüsse,
René

von Karl H. (kbuchegg)


Lesenswert?

Rene H. schrieb:
> Klaus,
>
> was ist denn der Sinn und Zweck des Forums?

Sicher nicht, dass man jeden nach dem Muster "Ich will, aber bitte nur 
wenn ihr mir das vorlest" durch absolute Grundlagendinge durchspricht.

Es kann natürlich mal vorkommen, dass jemanden ein Detail nicht klar 
ist, das ist dann kein Problem. Aber wer in einem Matheforum die Frage 
stellt "stimmt es, dass 2 zu 3 addiert eine 5 ergibt", der ist im 
Matheforum falsch sondern gehört in die Grundschule.

> Wenn jemand im Job neu ist und eine Frage stellt die für Dich in sich
> selbstverständlich und Klar ist, gibst Du auch die Antwort "es kann
> nicht Sinn und Zweck .....?"

Nochmal: es geht nicht um slebstverständlich oder nicht.
Wenn jemand in einer Schlosserei anfängt und dann fragt, wie rum er den 
SChraubendreher halten muss, dann ist die einzig richtige Reaktion nicht 
die, die Frage zu beantworten, sondern das Dienstverhältnis aufzulösen.

> Constantin hat eine legitime Frage gestellt, eine Frage die wir uns auch
> mal alle gestellt haben, wenn es auch lange hin ist.

Die Frage haben wir uns aber höchstens für 2 Minuten gestellt. Denn 
solange haben wir gebraucht um im Buch die Beschreibungen der beiden 
Befehle zu vergleichen. Und gleich nach dem Lesen der Überschriften 
"binäres UND" versus "Logisches UND" ist uns geschwant, das es da wohl 
einen Unterschied gibt und das der mit Bitdarstellung bzw. der 
Darstellung von logischen Größen wie TRUE und FALSE zu tun haben wird.

Du kannst ja mal eine Umfrage machen, wieviele der hier anwesenden 
regelmässigen Antworter (und die dann auch noch richtige und korrekte 
Antworten geben) ein C Buch gelesen haben und wieviele nicht. Das 
Ergebnis wird dich überraschen. So gut wie alle haben eines 
durchgearbeitet (und ein paar haben sich sogar die Sprachdefinition in 
Form des Standarddokuments reingezogen - trockene Kost). Geht auch nicht 
anders. Durch anlassbezogenes Zusammenschnorren von Viertelwissen hat 
noch keiner eine Programmiersprache von Grund auf gelernt. Es hat schon 
seinen Grund, warum Bücher über Programmiersprachen nicht unter 200 
Seiten daherkommen. Und es hat auch seinen Grund warum genau dieselben 
Bücher bei den meisten Programmierern zerfleddert, mit Anmerkungen 
versehen, 150 Stellen mit PostIt markiert, mit Textmarker bearbeitet, 
zumindest die ersten paar Jahre ständig griffbereit neben dem Monitor 
liegen.
Denn wie du so schön sagst: Man kann nicht immer alles, speziell am 
Anfang, im Kopf parat haben. Dann braucht man eben ein Nachschlagewerk. 
Und ein besseres Nachschlagewerk als jenes, bei dem du auf die Seite 
genau weißt, wo die gesuchte Detailinformation steht - sprich DEIN Buch, 
das du schon mal durchgearbeitet hast - gibt es nicht.
(OK, das war mal so. Heute hat Google einige dieser Aufgaben übernommen. 
Was aber nicht heißt, dass ein Buch nicht trotzdem sinnvoll ist. Denn in 
einem K&R stehen dann eben auch noch die Detailinformationen dazu, da 
gibt es Beispiele, Codefetzen, Algorithmen etc)

von D. I. (Gast)


Lesenswert?

Ich glaube langsam zu verstehen was mit Fachkräftemangel gemeint ist... 
;)

von Rene H. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Es kann natürlich mal vorkommen, dass jemanden ein Detail nicht klar
> ist, das ist dann kein Problem. Aber wer in einem Matheforum die Frage
> stellt "stimmt es, dass 2 zu 3 addiert eine 5 ergibt", der ist im
> Matheforum falsch sondern gehört in die Grundschule.

Gleich neben mir sitzt einer der hat Mathematik und theoretische Physik 
studiert, der würde Dich für diesen Satz zerpflücken ggg

Ich gebe Dir ansonsten in allem Recht. Nur finde ich Constatins Frage 
weit weniger dümmlich wie manche Fragen sonst. Und sie wurde von manchen 
hier auch anständig beantwortet. Finde ich gut!

Grüsse,
René

von Christian F. (cmf) Benutzerseite


Lesenswert?

Constantin K. schrieb:
> Über eine Aufklärung wäre ich dankbar, ich suche seit Stunden Fehler...

Poste mal deinen Code, dann kann dir geholfen werden. Dann kommen auch 
sinnvolle Antworten.

von Udo S. (urschmitt)


Lesenswert?

Rene H. schrieb:
> Ich gebe Dir ansonsten in allem Recht. Nur finde ich Constatins Frage
> weit weniger wie manche Fragen sonst. Und sie wurde von manchen hier
> auch anständig beantwortet. Finde ich gut!

Und Konstantin hat sich nicht mehr gemeldet. Das kann bedeuten:
- Er wurde so erschlagen von den Antworten, daß er sich nicht mehr traut
- er hat es begriffen, findet es aber unnötig Danke zu sagen
- er hat es so gut begriffen, daß er jetzt in seinem C Buch liest und 
alles um sich herum vergisst.
:-)

@egbert:
Der Fehler sitzt in deinem Fall VOR der Tastatur!

von Christian F. (cmf) Benutzerseite


Lesenswert?

> - Er wurde so erschlagen von den Antworten, daß er sich nicht mehr traut
Ich tippe einfach mal hierrauf, deshalb ja mein Post.
> @egbert:
> Der Fehler sitzt in deinem Fall VOR der Tastatur!
Dem kann ich nur zustimmen. Ich möchte mal sehen, wie er mir meinen ~800 
Zeilen Code für meine automatische Modellbahnhofsteuerung in Assembler 
umschreibt.

von Karl H. (kbuchegg)


Lesenswert?

Rene H. schrieb:

> Ich gebe Dir ansonsten in allem Recht. Nur finde ich Constatins Frage
> weit weniger dümmlich wie manche Fragen sonst.

OK, dumm in dem Sinn war die Frage vielleicht nicht.
Aus seiner Frage geht klar hervor, dass er der Ansicht ist, dass ein && 
einfach nur 2 &-Operationen hintereinander sind. Das ist nicht im 
eigentlichen Sinne 'dumm', sie zeigt nur, dass er nicht verstanden hat, 
wie Programmiersprachen funktionieren, das es sowas wie Symbole gibt, 
die durchaus auch mal aus mehr als nur 1 Zeichen bestehen.

Ein Äquivalent wäre
1
   i = 5;
2
   i++;
3
4
warum ist i nach dieser Operation nicht 7, da sind ja 2 Additionen?

Jeder, der auch nur ein bischen Zeit investiert hat um die ersten paar 
Seiten eines C-Buchs zu lesen, kann diese Frage problemlos und kompetent 
beantworten. Wenns dann um die Feinheiten geht, wie zb was ist an
1
   i = i++;
2
   j = i++ * i++;
eigentlichj falsch und warum ist das falsch bzw. was ist die Begründung 
dafür, warum das falsch ist, .... kein Problem. Immer her damit, dafür 
ist ein Forum da.
Oder um bei einer Analogie zu bleiben: Wer als Erwachsener, der in einem 
technischen Bereich arbeiten möchte, eine technische Frage stellt, die 
jedes Kindergartenkind problemlos korrekt beantworten kann, sollte sich 
fragen ob er nicht etwas falsch macht.

> Und sie wurde von manchen hier auch anständig beantwortet.
> Finde ich gut!

Ja, so sind wir eben.
Trotzdem können wir uns den Hinweis auf ein Buch nicht verkneifen. 
Genausowenig wie sich dein Physikabsolvent einen derartigen Hinweis 
nicht verkneifen könnte, wenn zu ihm jemand kommt, der sagt er würde 
gerne bis zur Relativitätstheorie vorstossen, aber wie war das gleich 
nochmal mit dem 1. Newton und was bedeutet eigentlich das '*' in F=m*a

von Dosmo (Gast)


Lesenswert?

Es gibt halt Menschen, die fragen lieber andere Menschen, anstatt ein 
Buch zu lesen oder zu googlen. Liegt wohl in der kommunikativ-sozialen 
Natur des Menschen.
Sowie es auch Menschen gibt, die dann auch noch einen solch 
überflüssigen Kommentar dazu schreiben, wie diesen hier ;)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Dosmo schrieb:
> Es gibt halt Menschen, die fragen lieber andere Menschen, anstatt ein
> Buch zu lesen oder zu googlen. Liegt wohl in der kommunikativ-sozialen
> Natur des Menschen.

Nein, das liegt definitv an ihrer Faulheit. Mit "kommunikativ-sozial" 
hat das überhaupt nichts zu tun. Denn wären sie es, würden sie erstmal 
versuchen, eine gemeinsame Ebene mit ihren Gesprächspartnern 
anzustreben, bevor sie eine Diskussion beginnen.

von Klaus W. (mfgkw)


Lesenswert?

Wenn man nicht weiß, was es mit & und && und &&& auf sich hat, und dann 
hier landet:
Constantin K. schrieb:
> ich suche seit Stunden Fehler...

... und dann immer noch nicht auf die Idee kommt, freiwillig etwas zu C 
zu lesen, ist vielleicht sogar der Hinweis auf ein Buch überflüssig.

Das kann ich mir nicht mit Kommunikationsfreude erklären.

von Bitte Löschen (Gast)


Lesenswert?

Hallo Forumsbetreiber:

Bitte löscht den Thread einfach.

Danke.

von Klaus W. (mfgkw)


Lesenswert?

Warum? Bist du der TO?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bitte Löschen schrieb:
> Bitte löscht den Thread einfach.

Nö.

von Ritchies Kerni (Gast)


Lesenswert?

egbert schrieb:
> Die Syntax ist bei den C-Elaboraten ohnehin vernachlässigbar, da der
> Compiler nach dem Zufallsprinzip meist nicht funktionsfähigen Code
> erzeugt.
>
> C ist immer dann das Mittel zum Zweck, wenn einem Funktion und Ergebnis
> des Programms egal sind.

ROFL ... welchem Jahrhundert entstammst du denn?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ritchies Kerni schrieb:
> ROFL ... welchem Jahrhundert entstammst du denn?

Egbert hat sich (nicht nur in diesem Beitrag) einfach nur als
ausgewachsener C-Hasser zu erkennen gegeben.  Von irgendeiner
Art von Ahnung (wenn man von "keine Ahnung" absieht ;-) zeugt
das natürlich nicht, keine Frage.

von Klaus W. (mfgkw)


Lesenswert?

Jörg Wunsch schrieb:
> keine Ahnung

was zwanglos erklärt, daß er mit C nicht zurecht kommt.

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.