tengo un corto, instr
, que se ve así:sesión extender un número de nueve bits en C
1110xxx111111111
que necesito para sacar los bits 0-9, que hago con (instr & 0x1FF)
. Esta cantidad se almacena en un nuevo corto. El problema es que cuando esto ocurre, se convierte en 0x0000000111111111
, no en 0x1111111111111111
como yo quiero. ¿Cómo puedo arreglar esto? ¡Gracias!
EDITAR
Aquí está el código:
short instr = state->mem[state->pc];
unsigned int reg = instr >> 9 & 7; // 0b111
state->regs[reg] = state->pc + (instr & 0x1FF);
Se trata de un simulador que lee en el montaje. state
es la máquina, regs[]
son los registros y pc
es la dirección de la instrucción actual en mem[]
.
Esto está bien si los últimos nueve bits representan un número positivo, pero si están representando -1, se almacena como todos los 1, lo cual se interpreta como un valor positivo por mi código.
No estoy seguro de entender la pregunta o el proceso que está utilizando. ¿Te importa compartir el código que estás utilizando para obtener estos resultados? – joce
Esto no está claro, ¿quién debería convertirse en '0x1111111111111111'? – MByD