Перевод из двоичной СС в десятичную: выводится число на 1 меньше - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть примитивная функция преобразования двоичного числа в десятичное:
unsigned BinToDec(char* bin)
{
    int i;
    unsigned res = 0;
    
    for (i = 0; i < strlen(bin)-1; ++i )
    {
        if (bin[i] == '1')
            res |= (unsigned)(bin[i] - '0');
        res <<= 1;
    }
    
    return res;
}
По поводу нее возникает два вопроса: 1) В таком варианте функция выводит ответ - если число нечетное, то выводит его на 1 меньше, к примеру, вместо 127 выводит 126. Четное число выводит верно. 2) Если в цикле for (i = 0; i < strlen(bin)-1; ++i ) i < strlen(bin)-1 заменить на выражение i < strlen(bin), то выводит число, в два раза большее. Вопрос: почему strlen(bin) это много? Если, например, в bin записано 8битное выражение, то strlen, соответственно, будет равно 8. Как раз 8 итераций цикла, 8 обработок цифр. В чем проблема? Подскажите пожалуйста. Заранее спасибо.

Решение задачи: «Перевод из двоичной СС в десятичную: выводится число на 1 меньше»

textual
Листинг программы
for (i = 0; i < strlen(bin); ++i)

Объяснение кода листинга программы

  1. Переменная i инициализируется значением 0.
  2. Условие цикла for проверяет, что значение переменной i меньше длины строки bin.
  3. Если условие истинно, то выполняется тело цикла.
  4. В теле цикла значение переменной i увеличивается на 1.
  5. Цикл выполняется до тех пор, пока значение переменной i меньше длины строки bin.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы