Перевод из двоичной СС в десятичную: выводится число на 1 меньше - C (СИ)
Формулировка задачи:
Здравствуйте! Есть примитивная функция преобразования двоичного числа в десятичное:
По поводу нее возникает два вопроса:
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 обработок цифр.
В чем проблема? Подскажите пожалуйста.
Заранее спасибо.
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 меньше»
textual
Листинг программы
for (i = 0; i < strlen(bin); ++i)
Объяснение кода листинга программы
- Переменная
i
инициализируется значением 0. - Условие цикла
for
проверяет, что значение переменнойi
меньше длины строкиbin
. - Если условие истинно, то выполняется тело цикла.
- В теле цикла значение переменной
i
увеличивается на 1. - Цикл выполняется до тех пор, пока значение переменной
i
меньше длины строкиbin
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д