Guten Tag
Mich interessiert nur, ob eine Variable einen Wert enthält (<> 0), oder
keinen (0). Im ersten Fall möchte ich als Ergebnis 1 haben, im zweiten
Fall 0. Es soll kurz sein und in eine Zeile passen.
Gibt es außer mit den zwei '!!'
1
intzahl=1;
2
Serial.print(!!zahl);
3
zahl=51;
4
Serial.print(!!zahl);
noch eine Möglichkeit, wenns geht in einem Zeichen, um unabhängig des
Inhalts von "zahl" nur 0 oder 1 zu erhalten?
Guten Tag schrieb:> wenns geht in einem Zeichen, um unabhängig des> Inhalts von "zahl" nur 0 oder 1 zu erhalten?
brauchst du das für ein Preisauschreiben oder warum ist es wichtig dass
es nur ein Zeichen ist?
Es sind Variablen zu übergeben, die auch höhere Werte als 1 enthalten
können. Die Funktion darf aber nur 0 oder 1 als Argument erhalten. Das
mache ich immer mit "zahl ? 1 : 0" oder nun mit "!!zahl". Vielleicht
gibts was besseres, das "!!" sieht uncool aus.
C oder C++ natürlich. In den flachen Gewässern, wo ich gerade schwimme
(yC), mache ich wegen dem Unterschied keinen großen Zirkus. nur
Basicfunktionen, wo der Compiler keinen Unterschied macht
Guten Tag schrieb:> Es sind Variablen zu übergeben, die auch höhere Werte als 1 enthalten> können. Die Funktion darf aber nur 0 oder 1 als Argument erhalten. Das> mache ich immer mit "zahl ? 1 : 0" oder nun mit "!!zahl". Vielleicht> gibts was besseres, das "!!" sieht uncool aus.
In C gibt es weder etwas "Besseres" noch braucht man etwas Besseres.
Typischer Fall von Optimierung an einer Stelle, an der sie kein Schwein
braucht ;-)
Walter S. schrieb:> brauchst du das für ein Preisauschreiben oder warum ist es wichtig dass> es nur ein Zeichen ist?
Jetzt hören sie mal zu junger Mann. C ist die Abkürzung von "fass dich
kurz". Und das soll doch auch so bleiben. Ziel ist, das Programm in
einem Buchstaben zu verfassen.
Nee, ich programiere ja nicht oft in C/CPP, aber man gewöhnt sich an die
Kürzel und "komprimierten" Operatoren :)
Mark B. schrieb:> Guten Tag schrieb:>> Es sind Variablen zu übergeben, die auch höhere Werte als 1 enthalten>> können. Die Funktion darf aber nur 0 oder 1 als Argument erhalten. Das>> mache ich immer mit "zahl ? 1 : 0" oder nun mit "!!zahl". Vielleicht>> gibts was besseres, das "!!" sieht uncool aus.>> In C gibt es weder etwas "Besseres" noch braucht man etwas Besseres.>> Typischer Fall von Optimierung an einer Stelle, an der sie kein Schwein> braucht ;-)
Das sind ja nicht mal Optimierungen. Der Assembler Output ist immer der
selbe. Das ist dann reine Ästhetik, wobei Ästhetik nicht zwingend mit
Lesbarkeit einhergeht.
Grüsse,
René
Mark B. schrieb:> In C gibt es weder etwas "Besseres" noch braucht man etwas Besseres.>> Typischer Fall von Optimierung an einer Stelle, an der sie kein Schwein> braucht ;-)
Na du musst ja wissen, was für mich gut ist. Behalte deine Weisheit für
dich und wenn du nichts zur Frage weißt, behalte auch deine Worte geren
für dich.
René H. schrieb:> Das sind ja nicht mal Optimierungen. Der Assembler Output ist immer der> selbe. Das ist dann reine Ästhetik, wobei Ästhetik nicht zwingend mit> Lesbarkeit einhergeht.
Genau so ist es ;)
Guten Tag schrieb:> Mark B. schrieb:>> In C gibt es weder etwas "Besseres" noch braucht man etwas Besseres.>>>> Typischer Fall von Optimierung an einer Stelle, an der sie kein Schwein>> braucht ;-)>> Na du musst ja wissen, was für mich gut ist. Behalte deine Weisheit für> dich und wenn du nichts zur Frage weißt, behalte auch deine Worte geren> für dich.
Die Frage habe ich sehr wohl beantwortet. Es gibt in C nichts
"Kürzeres".
Ganz sicher gibt es Dinge, die Du in Deinen Programmen verbessern kannst
(die gibt es bei so ziemlich jedem). Du suchst nur gerade an der
falschen Stelle danach.
Ich will dazu schreiben, dass ich nicht alles in C/CPP kenne. Bitmasken
(8Bit) habe ich vor kurzem noch mit "^255" bit-invertiert. Bis ich "~"
entdeckt habe. Daswegen frage ich sowas, weil ich nicht alle Operatoren
kenne. Weil ich nicht oft in C/CPP ar beite
Guten Tag schrieb:> Walter S. schrieb:>> zahl ? 1 : 0> Guten Tag schrieb:>> zahl ? 1 : 0>> Zufälle gibts .. ;)
Schlechter Stil . Der Datentypen passt nicht. Gefordert ist bool, aber
ihr nehmt einen int.
Guten Tag schrieb:> Mark B. schrieb:>> Die Frage habe ich sehr wohl beantwortet. Es gibt in C nichts>> "Kürzeres".>> Als was?
In C hat eine Variable, die ungleich 0 ist den Wahrheitswert "true",
eine die gleich 0 ist den Wert "false". Genau das macht man sich mit
einem Ausdruck wie:
(zahl ? 1 : 0)
zunutze.
Woher kommt eigentlich die Vorstellung, dass es dafür eine kürzere
Ausdrucksweise geben müsste?
Guten Tag schrieb:> Ziel ist, das Programm in einem Buchstaben zu verfassen.
Viel Erfolg bei der Optimierung :-D
Übrigens ist man bei der Entwicklung von Kompressionsalgorithmen
mittlerweile so weit, daß man in der Lage ist, die Bibel auf ein
einziges Bit zu komprimieren!
Nur mit der Dekompression ist man noch nicht ganz so weit :-D
Guten Tag schrieb:> Coder schrieb:>> Schlechter Stil . Der Datentypen passt nicht. Gefordert ist bool, aber>> ihr nehmt einen int.>> Gibt kein speziellen "Bool" in C
Ab C99 schon.
Mark B. schrieb:> Woher kommt eigentlich die Vorstellung, dass es dafür eine kürzere> Ausdrucksweise geben müsste?
Ist doch egal. Und wenn es der C-Wahn ist.
OK, verstanden. Ihr könnt aufhören zu lästern. Ich bin mit !! sowieso
der kürzeste :D
Gute Nacht schrieb:> Danke. Du bist der einzig würdige C-Programmiererer. Die anderen sollen> besser BASIc nehmen.
Du bist vielleicht ein Schätzchen :-)
Daß es GENAU das gleiche ist wie deine allererste Variante, hast du
nicht bemerkt? Der Präprozessor nimmt hier die Arbeit ab...
Rolf M. schrieb:> Kannst stattdessen auch ein Newline nehmen, wenn dir das lieber> ist.
Ist ein Newline kürzer als ein Leerzeichen? ;-)
Er will doch:
> Ziel ist, das Programm in einem Buchstaben zu verfassen.
Rolf M. schrieb:> Guten Tag schrieb:>> wenns geht in einem Zeichen,>> irgendwo vorher ein#define X !!>> Dann geht's ab da so:> int zahl = 1;> Serial.print(X zahl);
Auch Mist. Boolscher , logischer Operator wird auf Ganzzahl angewendet.
Das einzige, was zum Bool führt ist ein Vergleich. Steht oben schon
irgendwo.
Coder schrieb:> Auch Mist. Boolscher , logischer Operator wird auf Ganzzahl angewendet.> Das einzige, was zum Bool führt ist ein Vergleich. Steht oben schon> irgendwo.
Das Ergebnis des Vergleichs ist ein int, der 0 oder 1 ist, ganz genau
wie beim !!. Macht also keinerlei Unterschied.
War aber auch exakt das, was gewünscht war:
Guten Tag schrieb:> Im ersten Fall möchte ich als Ergebnis 1 haben, im zweiten> Fall 0.