Programación General > C/C++
Almacenar en un long dos int
(1/1)
aisbel:
Hola a todos,
tengo una duda que no consigo resolver, a ver si me pueden ayudar:
Tengo las siguientes variables:
int x;
int y;
long coordenadas;
Me gustaría, ya que los enteros ocupan 2B y los long 4B, almacenar el primer entero (x) en los primeros 2B del long, y el segundo entero (y) en los 2B de más peso del long.
He probado varias formas, lo que intento hacer es algo así:
coordenadas= 0xFFFF0000L & x;
coordenadas= coordenadas & (y<<32);
Gracias de antemano :))
Eternal Idol:
En una PC (32/64 bits) int y long son 4 bytes, short son 2 bytes.
coordenadas = (y << 16) | x;
Despues para sacar x e y de coordenadas:
x = coordenadas & 0x0000FFFF;
y = coordenadas >> 16;
Geo:
Primero, deberías asegurarte que realmente los tipos tienen ese tamaño en bytes, para ello utiliza sizeof:
--- Código: C ---printf( "sizeof(int): %d bytesn", sizeof( int ) );printf( "sizeof(long): %d bytesn", sizeof( long ) ); Al menos en mi equipo, ambos tienen el mismo tamaño (4 bytes).
De cualquier forma, sería solo un dato aclaratorio. Si x y y son de 4 bytes pero tú te asegurarás que no tendrás valores mayores a los que se pueden almacenar en 2 bytes:
--- Código: C --- int x = 1; int y = 2; long coord = 0; coord = ( ( x & 0x0000ffff ) << 16 ) | ( y & 0x0000ffff ); -------------------
Edición:
Jeje, Eternal me ganó en enviar la respuesta :P.
Navegación
Ir a la versión completa