Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » 2 int zu long int kombinieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.09.2008, 22:03 Uhr
~ich
Gast


Hallo,
lassen sich zwei integer werte in ein long int verpacken?
ein long int belegt ja 8 bytes und ein int (meistens) 4.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.09.2008, 00:25 Uhr
Hans
Library Walker
(Operator)


Hi,

im Prinzip schon, bliebe blos die Frage zu klären, wozu das gut sein soll. Denn Speicherplatz spart man dadurch nicht, und der Zugriff wird auch recht umständlich:

C++:
int a,b;
long c;

a=1; b=2;
c=(a<<16) | b;  // die int-werte in long verpacken
printf ("a=%d, \nb=%d\n", (c&0xffff0000)>>16, c&0xffff);



Wie gesagt, das bleibt die Frage, wozu das gut sein soll?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.09.2008, 00:53 Uhr
Kest
saint


Nicht unbedingt. C++ sagt dazu: sizeof(int)<=sizeof(long). Es sei denn, du willst es gar nicht portabel haben.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.09.2008, 01:44 Uhr
Hans
Library Walker
(Operator)


@Kest: Stimmt, so steht es im Standard... - da fällt mir gerade auf: Wenn sizeof(int) = sizeof(long) ist, kann der Code, den ich da oben gepostet habe gar nicht funktionieren, weil der voraus setzt, das sizeof(int) < sizeof(long) ist. Genauer gesagt: 2 mal sizeof(int) = sizeof(long) wird erwartet.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.09.2008, 08:12 Uhr
WiredCoder




C++:
int Zahl_1=123;
long Zahl_2 = (long) Zahl_1;


Müsste eigentlich auch gehen wenn du es Statisch versuchst:

C++:
int Zahl_1=123;
long Zahl_2 = <static_cast><long>(Zahl_1);


--
Ich würde mich sehr über einen Besuch auf meiner Website freuen: www.Online-Programmierung.com
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.09.2008, 08:28 Uhr
RedEagle



mit "long long" müsste es aber gehen:

C++:
int a,b;
long long c;

a=1; b=2;
c=(a<<32) | b;  // die int-werte in long verpacken
printf ("a=%d, \nb=%d\n", (c&0xffffffff00000000)>>16, c&0xffffffff);

Zudem ist int auf 32-Bit (!und 64-Bit) Systemen 32Bit groß - also 4Byte

alternative:

C++:
union lii
{
struct i
{
  int a;
  int b;
};
long long c;
};

//...

lii irgendwas;
irgendwas.i.a = 1;
irgendwas.i.b = 2;
//irgendwas.c == 0x0000000200000001


natürlich immer vorrausgesetzt, dass int 4Byte hat, und long long 8Byte
--
MFG RedEagle

Dieser Post wurde am 06.09.2008 um 08:32 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.09.2008, 23:54 Uhr
Hans
Library Walker
(Operator)


Hi,

ich frag mich immer noch wozu das gut sein soll. Das Beispiel sollte eigentlich dazu dienen, die Umständlichkeit der Sache zu zeigen. Ausserdem hat sich ja gezeigt, das int und long auch gleich gross sein können. Dann funktioniert es so nicht, sondern man ist auf zusammengesetzte Typen wie structs angewiesen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: