Hallo, ich würde gerne 2 integer Zahlen zu einer zusammenfügen. Habe mal gegooglet und auch zig Beispiele gefunden wie dieses: a=2; b=3; c=ab; c = 10 * a + b Das funktioniert ja auch soweit, aber was mache ich, wenn a=0 ist und ich die Null aber auch benötige ... z.B 03 (um eine Uhrzeit zu speichern) ?. Jemand einen Tipp eine Idee ?. Vielen Dank im voraus. Gruß Christian
Christian B. schrieb: > Jemand einen Tipp eine Idee ?. geht nicht. ein int kann keine vornull speichern. die Vornull ist doch nur für den Menschen relevent, also schreibe sie auch nur bei der ausgabe mit hin.
03 ist als Integer genau das gleiche wie 3 Genauso wie 003 Als String wäre es unterschiedlich. Wenn Du also - worauf Du wahrscheinlichj hinauswillst - so etwas wie "03" irgendwo ausfgeben möchtest, dann sollte das in der Funktion gemacht werden, die für die Ausgabe verantwortlich ist.
Frank W. schrieb: > Genauso wie 003 Ausser 007. Der ist was besonderes. SCNR Um noch was sinnvolles zu sagen: Sorry aber so lernt man nicht programmieren. Du brauchst ein Grundlagenbuch und musst es auch durcharbeiten. Stichwort zu deinem Problem könnte "sprintf" oder "printf" sein. Darstellung numerischer Werte mit führenden Nullen
:
Bearbeitet durch User
In BCD kann man die führende Null mitspeichern, man kann die Zahl auch "normal" speichern und nur beim Anzeigen die Null hinzufügen.
Max H. schrieb: > In BCD kann man die führende Null mitspeichern In jeder Variable werden "die führenden Nullen mitgespeichert". "Leerer als Null" kann man nicht in eine Variable speichern. Da unterscheidet sich BCD nicht von allem anderen.
Frank W. schrieb: > In jeder Variable werden "die führenden Nullen mitgespeichert". und wie viele? 2, 10 oder 100? Dann könnte man damit ja Daten übertragen.
In einer (Beispiel) unsigned-int will ich eine 4 und eine 04 und eine 004 speichern. Auf meinem Beispielrechner habe die unsigned-int eine länge von 16 Bit. 4 = 0x0004 ( 0000000000000100 ) 04 = 0x0004 ( 0000000000000100 ) 004 = 0x0004 ( 0000000000000100 ) Es steht also immer 0004 drin. Wie gesagt - leerer als 0 geht nicht. es gib nur "0004". Kein " 004", " 04" oder " 4". Die Frage wie man es anzeigen will ist eine andere.
Frank W. schrieb: > Es steht also immer 0004 drin. Das ist natürlich gleich doppelt Quatsch. Zum einen passen in 16-Bit binär fünfstellige Dezimalzahlen, es müsste daher 00004 heißen, zum anderen steht da aber trotzdem nur 0000000000000100 drin. 4 oder 04 oder 004 oder 0x04, oder was auch immer, ist lediglich eine formatierte Ausgabe dieser Binärzahl. Oliver
Achtung mit führenden Nullen:
1 | if( 10 != 010 ) prinft("ätsch\n"); |
2 | if( 8 == 010 ) printf("genau!\n"); |
Stichwort Oktal-Zahl.
Oliver S. schrieb: > Das ist natürlich gleich doppelt Quatsch. Du hast vollkommen Recht. Ich hatte in den Zeilen obendran immer 0x0004 geschrieben. In der Zeile, auf die Du Dich beziehst, habe ich das 0x vergessen. > zum anderen steht da aber trotzdem nur 0000000000000100 genau. So wie es da geschrieben steht. > 4 oder 04 oder 004 oder 0x04, oder was auch immer, ist lediglich > eine formatierte Ausgabe dieser Binärzahl. Auch da hast Du recht. Deshalb steht oben ja auch > Die Frage wie man es anzeigen will ist eine andere. Nun kann man das als "doppelt Quatsch" bezeichen - muss es aber nicht.
:
Bearbeitet durch User
Peter II schrieb: > Frank W. schrieb: >> In jeder Variable werden "die führenden Nullen mitgespeichert". > > und wie viele? 2, 10 oder 100? Soviele, wie halt noch in der Variable übrig sind. > Dann könnte man damit ja Daten übertragen. Tut man doch. Die Nullen sind die Daten. Oliver S. schrieb: > 4 oder 04 oder 004 oder 0x04, oder was auch immer, ist lediglich eine > formatierte Ausgabe dieser Binärzahl. Genau genommen ist es eine formatierte und in eine andere Zahlenbasis umgewandelte Ausgabe der Interprätation dieser Zahl als Dualzahl. Letztendlich sind selbst 0 und 1 nur eine spezielle Interpretation der Zustände eines Bits.
Rolf Magnus schrieb: > Peter II schrieb: >> Frank W. schrieb: >>> In jeder Variable werden "die führenden Nullen mitgespeichert". >> >> und wie viele? 2, 10 oder 100? > > Soviele, wie halt noch in der Variable übrig sind. > >> Dann könnte man damit ja Daten übertragen. > Tut man doch. Die Nullen sind die Daten. Schätze er meinte, dass eine Interpretation existieren könnte, die bei bekannter Anzahl führender Nullen alleine durch die Kenntnis dieser Zahl Nutzerdaten transportieren kann. Geht aber deshalb nicht, weil die Rechenwerke i.A. keine Kenntnis der Dezimaldarstellung haben. Die Dezimaldarstellung selber ist ja nur eine Darstellungsform einer Dualzahl (genauso wie Hex oder sonstige b-adische Systeme), wo die Zahl halt durch ein 10-stelliges Ziffernalphabet repräsentiert wird. Je mehr Stellen das Ziffernalphabet (bei Hexadezimal hält 16 Symbole), desto kompakter die Darstellung. > Oliver S. schrieb: >> 4 oder 04 oder 004 oder 0x04, oder was auch immer, ist lediglich eine >> formatierte Ausgabe dieser Binärzahl. > > Genau genommen ist es eine formatierte und in eine andere Zahlenbasis > umgewandelte Ausgabe der Interprätation dieser Zahl als Dualzahl. > Letztendlich sind selbst 0 und 1 nur eine spezielle Interpretation der > Zustände eines Bits. Genau, die Zahl ist rechnerintern dual, aber es kann halt diverse Interpretationen davon geben.
Db8fs schrieb: > Schätze er meinte, dass eine Interpretation existieren könnte, die bei > bekannter Anzahl führender Nullen alleine durch die Kenntnis dieser Zahl > Nutzerdaten transportieren kann. Geht aber deshalb nicht, weil die > Rechenwerke i.A. keine Kenntnis der Dezimaldarstellung haben. Ja. Es handelt sich natürlich nicht um dezimale Nullen, die da drin stehen, zumindest nicht, solange man in der Variable kein gepacktes BCD speichert.
So interessant ich diese Überlegungen auch finde weiß ich nicht ob sie dem TE helfen werden ;) Wenn du mit 2Zahlen zusammenfügen nicht die Addition meinst sondern das Aneinanderhängen, dann ist wie schon erwähnt eine Zahl nicht der richtige Datentyp. Istja im Matheunterricht nicht anders, da ist 3+0 eben 3 und nicht 30, C hält sich natürlich strikt daran. Beim Speichern eines Datums interessiert diese führende Null ja auch gar nicht, daher ist das schon sinnvoll. Der einzige Fall wo das von Interesse ist ist bei der Ausgabe an Menschen, also per RS232 oder LCD oder 7Segment oder so. Da habe ich gerade in FAQ einige gute Tipps entdeckt, Stichwort itoa() Falls dir Datentyp, String, Charakterarray und int noch nichts sagen, würde ich auch erst mal einen einfachen Anfang mit Buch oder zumindest Tutorial empfehlen.
Lenny D. schrieb: > So interessant ich diese Überlegungen auch finde weiß ich nicht ob > sie > dem TE helfen werden ;) Die Lösung wurde ja auch bereits genannt. Konkret die Verwendung von formatierter Ausgabe, wie z.B. per sprintf und Nutzung des richtigen Formatspezifiziers - siehe jeweilige libC. Natürlich schadet es aber auch nicht, sich selber mal nen Kopf zu machen und nicht nur fertige Lösungen aus ner Bibliothek zu nutzen. Und bei den augenscheinlich erheblichen Sprachdefiziten bezüglich ANSI-C des Threaderöffners (bitte nicht in den falschen Hals kriegen), ist es sehr ratsam, auch gewisse Grundlagen mal zu diskutieren.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.