Невозможно распечатать двоичный расчет - PullRequest
0 голосов
/ 17 октября 2019

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

дляНапример, если я наберу ./calc.c 5 + 5. Число равно 10, а двоичное - 00001010. Но я не знаю, как преобразовать десятичное число в двоичное с использованием кода.

Любая помощь?

Спасибо.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv){

  int dec1 = atoi(argv[1]);
  char op = argv[2][0]; 
  int dec2 = atoi(argv[3]);
  int i;


  printf("Called with dec1: %d op: %c dec2: %d\n", dec1, op, dec2);


  if(dec1 & 1){

    printf("bit is 1\n");
  }
  int sum = dec1 + dec2;

  if (op == '+'){

    for (i=0; i < 4; i++){

      printf("%d\n", i); 
    }
  }
  printf("\n");
  return 0;
}

1 Ответ

0 голосов
/ 17 октября 2019

Одним из решений является проверка значения каждого отдельного бита с помощью битовой маски. Обратите внимание, что целое число обычно составляет 4 байта в большинстве систем, но для вашего примера давайте рассмотрим только самые правые 8 бит. Кроме того, я собираюсь предположить, что sum уже правильно рассчитан, так как ваш вопрос касается печати целого числа в двоичном коде, а не разбора уравнений или арифметики.

Давайте сделаем битовую маску, эквивалентную 10000000, чторавно 128, а затем поверните его. Затем мы можем проверить sum с помощью побитового И, чтобы увидеть, установлен ли каждый бит.

int bitmask = 128;
for (int i = 0; i < 8; i++ ) {
    if (sum & bitmask)
        printf("1");
    else
        printf("0");
    bitmask = bitmask >> 1;
}

printf("\n");

Это решение проверяет каждый бит в sum слева направо, чтобы увидеть, установлен ли он. Если это так, выведите 1, в противном случае выведите 0. Это один из способов вывести целые числа в двоичном формате.

...