Поиск двоичного числа - PullRequest
       41

Поиск двоичного числа

0 голосов
/ 30 января 2019

Я определил некоторые значения, см. Ниже, и я не могу их правильно использовать.

#define add 000001
#define sub 000010
#define jmp 000111 

#define IMM 10000
#define ADDR 10001

В моем коде я задаю адрес в шестнадцатеричном формате.

            parameter1 = false;
            parameter1 = false; 

            uint64_t data = 0xffffffff05001e00;

            uint16_t vector[4];
            memcpy(vector, &data, sizeof(uint64_t));

            int currentPosition = 0;

            while (currentPosition < 4) {

                header = vector[currentPosition];//header

                opcode = header >> 0xA & 0x3F;
                src1 = header >> 0x5 & 0x1F;
                src2 = header & 0x1F;

                if (src1 == ADDR || src1 == IMM) { parameter1 = true; }
                if (src2 == ADDR || src2 == IMM) { parameter2 = true; } 
                ....
                currentPosition++;
           }

header = 1e00 в этом случае (потому что это вектор [0])

Вперед это будет сделано: opcode = 0x7, src1 = 0x10, src2 = 0x0.

Это означает в двоичном виде:000111 10000 00000 -> jmp IMM NULL

Когда первый , если вызывается , параметр1 должен получить значение true;но это никогда не случилось.Почему это происходит?Я не определил правильно значение IMM?

Спасибо !!!

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Чтобы получить доступ к определенным значениям, я просто переписываю их так:

  #define add 0x1
  #define sub 0x2
  #define jmp 0x7

  #define IMM 0x10
  #define ADDR 0x11

И теперь все работает нормально.

0 голосов
/ 30 января 2019

Ни одно из ваших определенных чисел не является двоичными числами

#define add 000001      // octal literals because it starts with 0
#define sub 000010          
#define jmp 000111 

#define IMM 10000       // decimal literals 
#define ADDR 10001

Ни одно из них не является двоичным представлением, как вы предполагаете в своем коде.

Начиная с C ++ 14 вы можете написать двоичный литерал как (пример из https://en.cppreference.com/w/cpp/language/integer_literal):

int b = 0b101010; // C++14

В общем, я настоятельно советую вам не использовать #define, если вы не умышленновыберите, чтобы получить все проблемы, связанные с использованием макросов.

...