В настоящее время я пытаюсь написать виртуальную машину ниндзя, задание, которое было дано мне в качестве упражнения.Код операции и значение сохраняются в 32-битном целом без знака, причем первый 8-бит является кодом операции, а остальные - значением.Чтобы справиться с отрицательным значением, я использую макрос, данный мне в упражнении
#define SIGN_EXTEND(i) ((i) & 0x00800000 ? (i) | 0xFF000000 : (i))
Однако при попытке получить код операции
unsigned int i = (PUSHC << 24) | SIGN_EXTEND(-2);
(где PUSHC
равно 1
)
с использованием побитового AND
, как показано здесь ->
int opcode = (i>>24)&0xff
мой результат255
, хотя этот метод извлечения работает, когда значение положительное, и в этих случаях воспроизводит правильный код операции.
При исследовании этого я обнаружил, что " Как я получаю значение из Непосредственной части32-битной последовательности в C?", которая, по-видимому, имеет дело с тем, что я спрашиваю, однако ответ на этот вопрос - именно то, что я делаю, кто-нибудь знает больше?