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

[0] Índice de Mensajes

Ir a la versión completa