2 interger in C zusammenfügen

OP #3765515
Lesenswert?
• ▲
▼
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
(Firma: DB1FW) Persönliche Seite #3765566
Lesenswert?
• ▲
▼
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.
(Firma: DB1FW) Persönliche Seite #3765589
Lesenswert?
• ▲
▼
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.
#3765898
Lesenswert?
• ▲
▼
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.
Gast #3765927
Lesenswert?
• ▲
▼
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.
#3766130
Lesenswert?
• ▲
▼
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.
#3766151
Lesenswert?
• ▲
▼
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.
Gast #3766260
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren