Разобрать код - C (СИ)
Формулировка задачи:
здравсьвуйте,
помогите, пожалуйста, разобраться в программе:
она выводит двоично-кодированную десятичную запись числа.
больше всего непонятно, что значит это особенно вот та строчка (x=ch-'0') и зачем в конце getchar дважды
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, flag_first,numflag;
int b,i,x,xx;
int ch='a';
int flag;
printf("enter x:");
scanf("&d\n", &x);
ch=getchar();
while(ch!=EOF)
{
while((ch!=10)&&(ch!=13))
{
x=ch-'0';
flag=1;
for(i=4;i>=1;i--) {
b=(x & (1 << (i-1))) >> (i-1);
if(b && !flag) { flag=1; }
if(flag) printf("%d", b);
}
ch=getchar();
}
printf("\n");
ch=getchar();
}
}while(ch!=EOF)
{
while((ch!=10)&&(ch!=13))
{
x=ch-'0';
flag=1;
for(i=4;i>=1;i--) {
b=(x & (1 << (i-1))) >> (i-1);
if(b && !flag) { flag=1; }
if(flag) printf("%d", b);
}
ch=getchar();
}
printf("\n");
ch=getchar();
}
}Решение задачи: «Разобрать код»
textual
Листинг программы
void BinDecPrintf(int x)
{
int i,d;
char c[4];
do
{
for (d=x, i=3; i>=0; --i, d/=2)
{
c[i]=d%2+'0';
}
for (i=0; i<4; ++i)
{
printf(c[i]);
}
x/=10;
} while (x!=0);
}
Объяснение кода листинга программы
В данном коде реализована функция BinDecPrintf, которая принимает целочисленный аргумент x и выводит его двоичное представление. Внутри функции объявлены следующие переменные:
- i, d — целочисленные переменные, используются для выполнения операций деления и остатка от деления, а также для итерации по массиву c;
- c — массив символов, используется для хранения двоичных цифр, которые затем выводятся на экран. Далее в функции выполняется цикл do-while, который продолжается до тех пор, пока x не станет равным нулю. Внутри этого цикла выполняются следующие действия:
- Внутренний цикл for используется для разбиения числа x на отдельные двоичные цифры. Переменная d инициализируется значением x, а переменная i инициализируется значением 3. Затем происходит итерация по массиву c и вычисление значения переменной d путем деления x на 2 и остатка от деления, который затем приводится к символу. Например, если остаток от деления равен 1, то в массив c записывается символ '1', если 0 - то '0'.
- Затем выполняется внешний цикл for, который используется для вывода символов из массива c на экран.
- Значение x уменьшается на 10, так как это значение соответствует степени десятки. Таким образом, в результате выполнения функции BinDecPrintf на экран будет выведено двоичное представление числа x.