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
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.
&, | 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
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.
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?
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?
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.
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?
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
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.
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.
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é
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)
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é
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.
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!
> - 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.
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
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 ;)
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.
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.
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?
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.