Empequtar dos Short en un Int y viceversa

28/05/2004 - 16:41 por Gandalf | Informe spam
Pues lo dicho, como puedo empaquetar dos variables Short (Int16) en una Int
(Int32) y luego volver a obtener los valores iniciales.

Un Saludo y Gracias.

Preguntas similare

Leer las respuestas

#1 A.Poblacion
28/05/2004 - 17:05 | Informe spam
short a,b;
int i = a<<16 | b;
a = i>>16;
b = i & 0xffff;


"Gandalf" wrote in message
news:
Pues lo dicho, como puedo empaquetar dos variables Short (Int16) en una


Int
(Int32) y luego volver a obtener los valores iniciales.
Respuesta Responder a este mensaje
#2 A.Poblacion
28/05/2004 - 17:27 | Informe spam
Otra respuesta, esta vez en plan de "broma" (funciona pero desde luego no es
recomendable):

//Para combinar dos valores:
int i;
short a=..., b=...;
unsafe {
short *p = (short *) &i;
*p = a;
*++p = b;
//En este momento, i contiene a y b
}

//Para sacar los valores:
int i=...;
short a,b;
unsafe {
short *p = (short *) &i;
a = *p;
b = *++p;
}



"A.Poblacion" wrote in
message news:uDYm$
short a,b;
int i = a<<16 | b;
a = i>>16;
b = i & 0xffff;


"Gandalf" wrote in message
news:
> Pues lo dicho, como puedo empaquetar dos variables Short (Int16) en una
Int
> (Int32) y luego volver a obtener los valores iniciales.



Respuesta Responder a este mensaje
#3 Gandalf
28/05/2004 - 17:45 | Informe spam
A ver: lo siguiente NO funciona:
short a=-10,b=-5;

int i = a<<16 | b;

a = (short)(i>>16);

b = (short)(i & 0xffff);

En la variable a se queda un -1 y no un -10.

al hacer el desplazamiento de bit el Compilador genera un warning: Operador
OR bit a bit usado en un operando con extensión de signo.

Un Saludo y gracias por tu respuesta.
Respuesta Responder a este mensaje
#4 Gandalf
28/05/2004 - 18:00 | Informe spam
Esto si funciona, pero como tu dices, no creo que sea recomendable
"A.Poblacion" escribió en
el mensaje news:O6j$
Otra respuesta, esta vez en plan de "broma" (funciona pero desde luego no


es
recomendable):

//Para combinar dos valores:
int i;
short a=..., b=...;
unsafe {
short *p = (short *) &i;
*p = a;
*++p = b;
//En este momento, i contiene a y b
}

//Para sacar los valores:
int i=...;
short a,b;
unsafe {
short *p = (short *) &i;
a = *p;
b = *++p;
}



"A.Poblacion" wrote in
message news:uDYm$
> short a,b;
> int i = a<<16 | b;
> a = i>>16;
> b = i & 0xffff;
>
>
> "Gandalf" wrote in message
> news:
> > Pues lo dicho, como puedo empaquetar dos variables Short (Int16) en


una
> Int
> > (Int32) y luego volver a obtener los valores iniciales.
>
>
>


Respuesta Responder a este mensaje
#5 Gandalf
28/05/2004 - 18:52 | Informe spam
Empaquetor dos int en un long y viceversa:
int hi = -5;

int lo = -6;

//long val = (((long)hi) << 32) | lo; // Warning: CS0675

long val = (((long)hi) << 32) | ((uint)lo); // correct

hi=(int)(val>>32);

lo=(int)(val & 0xffffffff);

Empaquetar dos short en un int y viceversa:

short a=-20,b=-6;

int i = (((int)a)<<16) | ((ushort)b);

a = (short)(i>>16);

b = (short)(i & 0xffff);

Point pt=new Point(i); //otra forma de obtener los valores: pt.x==-6 y
pt.y==-20

Un Saludete



"Gandalf" escribió en el mensaje
news:
Pues lo dicho, como puedo empaquetar dos variables Short (Int16) en una


Int
(Int32) y luego volver a obtener los valores iniciales.

Un Saludo y Gracias.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida