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

#6 Octavio Hernandez
29/05/2004 - 11:52 | Informe spam
Gandalf,

¿No pierdes el signo del segundo número al hacer val = (((long)hi) << 32) |
((uint)lo) ?

Saludos,

Octavio

"Gandalf" escribió en el mensaje
news:
Mostrar la cita
#7 Gandalf
31/05/2004 - 12:06 | Informe spam
No, no se pierde. Al hacer la conversión explicita a (uint) se hace bit a
bit y por tanto se conserva el bit de signo.

Prueba a hacer:

int num=-1;
uint num2=(uint)num;

y veras como en num2 no hay un 1, sino un 4294967295 o sea FFFFFFFF en
hexadicimal, lo mismo que en num1.

O más claro todavía haz:

Console.WriteLine("{0:x}",num1);

Console.WriteLine("{0:x}",num2);

Un Saludo.
#8 Octavio Hernandez
01/06/2004 - 00:06 | Informe spam
Gandalf,

Ya he encontrado lo que me hacía sospechar.
Ese código te funciona porque por defecto los proyectos de C# se compilan
con la opción del compilador /checked desactivada. Si pones la opción en
true (en Propiedades del Proyecto | Configuración | Generar), se producirá
una excepción al ejecutar la segunda línea de:

int num = -1;
uint num2 = (uint) num;

Lo correcto para que siempre funcione es:
int num = -1;

uint num2;

unchecked

{

num2 = (uint) num;

}


Salu2 - Octavio



"Gandalf" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida