C программа для преобразования десятичного числа в двоичную строку - PullRequest
0 голосов
/ 10 апреля 2020

Мне дали эту программу для преобразования введенного десятичного числа в строку, которая является двоичным числом. Теперь это правильная программа и работает. У меня есть сомнения в while l oop выражении ch = (rem + 48); Я считаю, что значение остатка rem в конечном итоге будет унаследовано ch, тогда зачем добавлять 0 ie. 48 с точки зрения ASCII имеет значение. Что делает добавление 48 конвертировать rem в символьную форму. Если я просто напишу ch = rem;, ch не будет считаться символом, а добавление 48 сделает его символом. Но почему ???

void main()
{
    char x[15],tmp,ch;
    int i=0,j=0,dno,rem;
    printf("\nEnter decimal number:");
    scanf("%d",&dno);
    while(dno>0)
    {
        rem = dno % 2;
        ch = (rem+48);
        x[j++] = ch;
        dno/=2;
    }
    x[j--]='\0';
    while(i<j)
    {
        tmp = x[j];
        x[j--] = x[i];
        x[i++] = tmp;
    }
    puts(x);
    return;
}

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020

В C для преобразования символа di git в его эквивалентное целочисленное значение мы можем использовать это соотношение:

x = character - '0'

Аналогично для преобразования di git в его эквивалентный символ di git, мы используем соотношение:

ch = digit + '0'

Вот почему добавление 48 к вашему rem делает его символом.

0 голосов
/ 10 апреля 2020

dno будет хранить целое число, вы можете вручную преобразовать integer в char, добавив в него символ '0', '0' будет взят как целое число, представляющее код символа, наиболее распространенным является 48 это код ASCII , есть другие, например EBCDI C, в этом случае код 240, поэтому совет всегда использовать буквенный символ вместо цифры c код.

Для ASCII:

0 + 48 or 0 + '0' = 48 //this represents the ASCII code for the character '0'
1 + 48 or 1 + '0' = 49 //this represents the ASCII code for the character '1'
//... and so on...

Для EBCDI C:

0 + 240 or 0 + '0' = 240 //this represents the EBCDIC code for the character '0'
1 + 240 or 1 + '0' = 241 //this represents the EBCDIC code for the character '1'

Итак:

'0' - '0' = 0; //or 48 - 48 = 0 or 240 - 240 = 0
'1' - '0' = 1; //or 49 - 48 = 1 0r 241 - 240 = 1

Эта арифметика c работает, потому что в C разные таблицы символов должны иметь последовательные числовые символы.

0 голосов
/ 10 апреля 2020

ch - это число, представляющее значение символа ascii

48 соответствует символу "0"

49 соответствует символу "1"

сумма от rem (0 или 1) до 48 приводит к 48 или 49, соответственно символы "0" и "1"

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