zwei int werte zu einen manipulierten long int wert zusammenfügen
-
Hallo wende mich mal wieder mit einer frage auf die ich keine richtige Lösung finde an euch liebe Community.
Zu meinen Problem:
Ich habe zwei Int werte welche ich zu einen Long int zusammenfügen möchte:
ungefähr so:int a = 100;
int b = 200;--> long int c = 100200;
Allerdings darf die zweite zahl erst ab index nummer 3 losgehen soll heißen wenn meine erste zahl kleiner als 100 ist muss eine null vorangestellt werden.
wieder an einen Beispiel:int a = 99;
int b =256;--> long int c = 256099;
Hoffe mir kann jemand helfen die lösung sollte wenn möglich sehr kompakt sein.
Des weiteren währe es super wenn ihr mie noch sagen könntet wie ich das ganze wieder rückgängig machen kann, also wie ich aus c wieder a und b bekomme bei der bedingung das die beiden Zahlen a und b nicht größer als 256 sind.Vielen Dank an alle die sich die zeit nehmen.
-
Ich erklaers ausgehend von deinem ersten Beispiel:
int a = 100;
int b = 200;--> long int c = 100200;
Du bekommst c am einfachsten indem du a mit 1000 multiplizierst und dann einfach mit b addierst, d.h. c = 1000*a + b.
Aus c bekommst du a sehr leicht, indem du c durch 1000 teilst und die Nachkommastellen abschneidest (z.B. mit einem Cast nach int). Der Rest duerfte dann kein Problem mehr darstellen.
-
Also am schnellsten sollte es in C mit dem <<-Operator gehen.
short alpha=3; short beta=5; int gamma=(int)alpha+(((int)beta)<<16); cout << gamma << '\n';
Das Ergebnis ist dann 0x3+0x50000=0x50003.
Edit: Unsinn, jetzt sollte die Rechnung stimmen. Zahlensysteme....
-
Schön und gut, nur hat cout nichts mit ISO-C zu tun...
-
Thuruk schrieb:
short alpha=3; short beta=5; int gamma=(int)alpha+(((int)beta)<<16); cout << gamma << '\n';
Das Ergebnis ist dann 0x3+0x50000=0x50003.
Das ist aber nicht das Ziel!
-
Was willst du denn haben. Einen aus zwei int zusammen gesetzten long int oder einen String mit eingefügten Nullen? Mir ist die Frage nicht klar!
-
Belli schrieb:
Thuruk schrieb:
short alpha=3; short beta=5; int gamma=(int)alpha+(((int)beta)<<16); cout << gamma << '\n';
Das Ergebnis ist dann 0x3+0x50000=0x50003.
Das ist aber nicht das Ziel!
Also wenn man nach dem Titel des Themas geht, schon. Dann kann er einfach short und int zu int und long int machen und es funzt.
Andernfalls steht die Antwort eh schon zur Verfügung.
PrettyC schrieb:
Schön und gut, nur hat cout nichts mit ISO-C zu tun...
Schön und gut, nur geht es so schneller als mit printf(...). Also zum Tippen jetzt, keine Ahnung ob es da Unterschiede gibt.^^
-
Thuruk schrieb:
Belli schrieb:
Thuruk schrieb:
short alpha=3; short beta=5; int gamma=(int)alpha+(((int)beta)<<16); cout << gamma << '\n';
Das Ergebnis ist dann 0x3+0x50000=0x50003.
Das ist aber nicht das Ziel!
Also wenn man nach dem Titel des Themas geht, schon.
Vielleicht solltest Du den ganzen Beitrag lesen, und nicht nur den Titel? Bei den Ausgangszahlen, die Du hier als Beispiel nimmst, möchte der TE das Ergebnis
5003
haben und bereits die erste Antwort zeigt ihm die Lösung. Probier doch mal Deinen Weg mit den Zahlen aus dem Beispiel des TE und vergleiche dann Dein Ergebnis mit dem, was er als Resultat haben möchte.
-
obendrein würde mein compiler eine cout-Anweisung nicht übersetzen...
-
cout ist aber nun wirklich keine ISO C oder?
Von daher ist die erste Lösung mit cout fein aber offtopic.
-
Mein Güte, dann stell es dir ohne cout vor, das war ja nur zur Ausgabe.
-
Dein Ergebnis weicht aber auch ohne cout vom Ziel des Threaderstellers ab.