Как преобразование двоичного в десятичное осуществляется на языке c - PullRequest
1 голос
/ 25 января 2020

Как реализации printf эффективно реализуют преобразование целочисленных значений в десятичные?

Ответы [ 2 ]

0 голосов
/ 26 января 2020

На современных компьютерах вычисления, как правило, выполняются намного быстрее, чем ввод-вывод, и так обстоит дело здесь. Библиотека C будет использовать простой подход. Опция по модулю используется для получения наименьшего значащего значения di git, а деление используется для получения значения di git и итерации. К сожалению, цифры генерируются в обратном порядке относительно порядка ввода / вывода, поэтому их необходимо буферизовать перед выводом. Это можно сделать с помощью рекурсии, но максимальное количество цифр известно априори, поэтому быстрее предварительно выделить массив символов.

Число может быть отрицательным, поэтому оно обрабатывается вне l oop .

char digits[N];
p = &digits[N-1];
*p-- = 0;
unsigned x = integer_input;
if (integer_input < 0 && integer_input >= -INT_MAX) x = -integer_input;
do {
    *p-- = (x % 10) + '0';
    x /= 10;
} while x != 0;
if (integer_input < 0) *p-- = '-'
// now p points to c string

Это как newlib это делает , хотя он поддерживает базы, отличные от 10.

Это как это делает glib c 1011 *.

Оба следуют подходу, описанному выше, хотя и обобщенно.

0 голосов
/ 25 января 2020

Вам нужно только знать, что компьютер может выполнять только две операции, первая из которых является дополнением к одному, а вторая - дополнением. Все остальные операции также выполняются этими двумя операциями. И при сохранении данных в памяти, если для преобразования реализовано два дополнения, которое также выводится из вышеупомянутых двух операций, и снова преобразование выполняется из двоичного в десятичное.

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