изменить на двоичный без массивов - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь изменить цифру в двоичную без использования массивов.Например:

, когда x равен 7
print 00000111

Этот код, который я сделал, выдает 11100000.У меня проблемы с его восстановлением

Ответы [ 3 ]

2 голосов
/ 31 марта 2019

В вашем коде несколько проблем:

  • В вашем методе ввода есть неопределенное поведение: формат scanf %d ожидает адрес int, тогда какx определяется как char.

  • , вы не должны использовать char для хранения байтового значения.unsigned char или int лучший выбор.

  • Вы должны проверить, был ли введен scanf() действительный ввод.

  • выдолжен выводить биты от старшего к младшему разряду.

Вот исправленная версия:

#include <stdio.h>

int main() {
    int x;
    if (scanf("%d", &x) == 1) {
        for (int mask = 128; mask != 0; mask = mask / 2) {
            printf("%d", (x & mask) != 0);
        }
        printf("\n");
    }
    return 0;
}
0 голосов
/ 31 марта 2019

Сначала вы можете изменить свое начальное число таким образом, чтобы его i-й бит находился в позиции 7-i.

Это можно сделать с помощью следующего кода:

int bit_reverse(char x)
{
   int r=0;
   for (int i=0; i<8; i++){
      r=2*r + x%2;
      x=x/2;
   }
   return r;
}

На самом деле, функция использует целое число r в качестве стека. Первые извлеченные биты сдвигаются в верхние позиции путем последовательного умножения на 2.

Затем вам просто нужно применить свой исходный код к тому, что возвращает функцию bit_reverse.

int main(){
  int x;
  scanf("%d", &x);
  int r=bit_reverse(x);
  int i;
  for(i=0;i<8;i++){
    printf("%d",r%2);
    r=r/2;
  }
  return 0;
}
0 голосов
/ 31 марта 2019

Поскольку вы не хотите сохранять временные результаты для каждого цифрового изображения, фактически первый полученный вами цифровой отпечаток будет последним, то есть LIFO.Вы можете использовать рекурсию для эмуляции стека, подобного потоку управления.

#include <stdio.h>


int print_binary(unsigned char x, int num) {
  if ( num == 0) {
    printf("%d",x);  
    return 0;
  }
  print_binary(x/2, num-1);
  printf("%d",x%2);         /* print this digital only after finding other ones */ 
  return 0;
}


int main() {
  char x;
  scanf("%d",&x);
  print_binary(x,7);   /* iteration takes up to 8 times */
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...