1

Пытаюсь перевести десятичное число в двоичное, с незначащими нулями в начале(восьми-битная запись)

   while(j<i) {

    u = 128;
    while (true)
    {

        if (A[j] & u) {
            num2[k] = '1';
            k = k + 1;
        }
        else {
            num2[k] = '0';
            k = k + 1;
        }
        if (u == 1)
            break;
        u >>= 1;

    }
    j = j + 1;
    //u = 128;
}
num2[k] = '\0';

Исправил немного , visual ругается на

                   if (A[j] & u)

Оригинал тут https://ru.stackoverflow.com/a/99091/258486

Elvin
  • 1,802
  • 73 в восьми битах записывается как 01001001. Откуда взялось "должно быть 1001001"??? Также, старший бит среди восьми битов имеет вес 128. Почему тогда у вас проверки начинаются с 256? Исправляем 256 на 128 - получаем 01001001, как и должно быть. – AnT stands with Russia Mar 15 '18 at 22:35
  • 1
    Также, сколько можно дылдонить одно и то же: строка в С должна завершаться символом '\0'? – AnT stands with Russia Mar 15 '18 at 22:38
  • 2
    В программировании нету «двоичных» и «десятичных» чисел (отвлекаясь от битовых операций), есть их строковое представление. Соответственно вы не переводите двоичное число в десятичное, а получаете строковое представление числа в той или иной системе. https://ru.stackoverflow.com/q/453059/10105 – VladD Mar 15 '18 at 22:40
  • @AnT,@VladD, исправил, посмотрите, пожалуйста – Elvin Mar 15 '18 at 22:45
  • Что произошло? Был более-менее нормальный код, в котором надо было исправить 256 и 128. Сейчас вдруг стало непонятно что. Почему вдруг j = j + 1; уехало внутрь внутреннего цикла??? Зачем вы это сделали? Вы что ли тупо случайным образом корежите код? – AnT stands with Russia Mar 15 '18 at 22:48
  • @AnT,я это сделал, потому что не понимаю, почему происходит исключение по адресу – Elvin Mar 15 '18 at 22:56
  • @Igor,Я пытаюсь читать учебники.K&R - ужасный учебник, справочник Г. Шилдта вроде норм.Но хуже всех - Алгоритмы и структуры данных Вирта(ничего не понятно было в части про алгоритмы ). Остается только учебник Полякова по Си – Elvin Mar 15 '18 at 23:44

1 Answers1

1
#include <stdio.h>

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

int j,k;
char buf[32];

    printf ("Введите преобразуемое десятичное значение: ");
    scanf("%d", &j);

    // Преобразуем
    for (k=7; k>=0; k--) {
        if (j & 0x01) 
            buf[k] = '1';
        else
            buf[k] = '0';
        j = j >> 1;
    }
    buf[8] = '\0';

    printf("Двоичное представление: %s\n", buf);
}
Sergey
  • 13,474