почему после printf print 0x32 - PullRequest
1 голос
/ 22 ноября 2010
#include<stdio.h>
int main ()
{
printf("%#04x",50);
}

Кто-то показал мне приведенный выше код, и я не мог его понять, поскольку я действительно использовал printf в программах на C, но выше такого рода, который я впервые увидел в своей жизни.Почему вышеприведенный код печатает как

0x32

Может ли кто-нибудь дать мне ссылку или ссылку на какую-то вещь, чтобы я мог лучше ее понять.

Ответы [ 3 ]

5 голосов
/ 22 ноября 2010

со страницы printf(3):

Флаг символов

За символом% следует ноль или более следующих флагов:

# & mdash; Значение должно быть преобразовано в «альтернативную форму». Для o преобразований первый символ выходной строки делается нулевым (с помощью префикса 0, если он уже не был нулевым). Для преобразований x и X ненулевому результату предшествует строка «0x» (или «0X» для преобразований X). Для преобразований a, A, e, E, f, F, g и G результат всегда будет содержать десятичную точку, даже если за ней нет цифр (обычно десятичная точка появляется в результатах этих преобразований, только если цифра следует). Для преобразований g и G конечные нули не удаляются из результата, как это было бы в противном случае. Для других преобразований результат не определен.

Другие флаги опущены ...

Таким образом,% # добавляет «0x» к выводу, поскольку формат вывода x. Здесь 0 для использования 0 (нули) для заполнения. Тогда число 4 говорит, что общее количество символов для печати - четыре. Если бы число 4 было заменено на 10, результат был бы 0x00000032 & ndash; всего 10 символов.

5 голосов
/ 22 ноября 2010

50 десятичное - это шестнадцатеричное 32.

Кроме того, документация должна рассказать вам все, что вам нужно знать.

2 голосов
/ 22 ноября 2010

Поскольку% x форматирует данное значение в шестнадцатеричном формате.

Фактически, 0x32 (шестнадцатеричный) == 50 (десятичный).

Это хороший учебник для начинающих для справки.

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