C выходной вопрос. Может ли кто-нибудь объяснить этот вывод? - PullRequest
0 голосов
/ 03 апреля 2020
#include<stdio.h>
void main()
{
    printf("%d",'AA');
}

Я ожидал там ошибки, но программа запустилась, и на выходе было 16705. Кто-нибудь может объяснить это?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2020

Может кто-нибудь объяснить это?

'AA' - это многосимвольная символьная константа. Он имеет тип int. Это значение определяется реализацией.

"Реализация" - это компилятор, и у вашего компилятора есть правила, которым сопоставлено int значение 'AA'. Отображение, кажется, легко. Потому что я не знаю ваш компилятор, я догадываюсь об этом. Чтобы быть уверенным, обратитесь к документации вашего компилятора.

'AA' соответствует значению 'A' << 8 | 'A'. Бит сдвинут 'A' на байт с другим 'A'. Ваша система, скорее всего, использует ASCII для представления символов. 'A' отображается в ASCII на значение 65 в десятичном виде (0x41 в шестнадцатеричном). Вычисление 0x41 << 8 | 0x41 дает значение 16705 в десятичном виде. Поскольку это значение int, вы можете использовать %d для печати результата. Таким образом, ваш код эквивалентен printf("%d\n", 16705).

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

этот код запускается, потому что тип данных char является числом, и у вас есть запрос на печать действительного числа 'AA'

https://en.wikipedia.org/wiki/C_data_types

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

'AA' - зверь экзотический c. Это символьный литерал, но в ASCII нет ни одного символа 'AA'. Это объясняет, почему вместо этого вы получаете значение не ASCII.

...