Así que estoy leyendo un número entero de 12 bits de una matriz de bytes. Ese número puede ser negativo, pero no puedo imaginar cómo convertirlo en una variable utilizable int16/int32 en C#. Tengo la sensación de que tendré que hacer algo con cambios de bit u otras operaciones a nivel de bits, pero hasta ahora he estado atacando. Alguien me puede apuntar en la dirección correcta.Convertir 12 bit int a 16 o 32 bits
var x = 0xFFF;
Esto debe imprimirse como -1, pero C# arroja naturalmente a un int32 e imprime como 4095. Si esto se debe convertir a int16 o int32, ¿cómo puedo conservar el valor negativo?
¡Funciona muy bien, muchas gracias! ¿Mente explicando qué está pasando aquí? sé lo que es el >>^| hacer pero no comprender del todo. – Clarke76
Básicamente cambiando a la derecha hasta que solo quede el bit de signo. Si es cero, simplemente devolvemos el valor original. Si es 1, tomamos -1 (0xFFFFFFFF), desactivamos los 12 bits más bajos ('xor'), luego' o' con el valor original para activar los bits en él. El resultado es básicamente activar los 20 bits superiores del valor de 32 bits. –
sí ... terminé escribiendo todo en papel y viendo exactamente lo que estaba pasando. Eso realmente ayudó. Obtuve que el último bit se usaría como indicador de negativo. Después de eso, fue fácil de seguir. Gracias de nuevo. – Clarke76