Преобразование десятичных литералов в ASCII-эквивалент для путча в C
Я пытаюсь понять, почему работает следующее утверждение:
putchar( 1 + '0' );
Кажется, что выражение + '0' преобразует литерал в соответствующую версию ASCII (49 в данном конкретном случае), которую putchar любит получать.
Мой вопрос был, почему он это делает? Любая помощь приветствуется. Я также прошу прощения, если я сделал какие-либо неверные предположения.
2 ответа
Это не имеет ничего общего с ASCII. Никто даже не упомянул ASCII.
Этот код предполагает, что в кодировке символов системы все цифры отображаются в виде непрерывного диапазона от '0'
в '9'
и так, если вы добавите смещение к символу '0'
Вы получите символ для соответствующей цифры.
Все кодировки символов, которые могут быть использованы компилятором C или C++, должны иметь это свойство (например, 2.3/3 в C++), поэтому этот код переносим.
Персонажи '0'
в '9'
являются последовательными Стандарт C гарантирует это.
В ASCII:
'0'
= 48'1'
= 49'2'
= 50
и т.п.
'0'
просто рассматривается как смещение.
'0' + 0 = 48
, который'0'
,'0' + 1 = 49
, который'1'
,
и т.п.