Преобразование десятичных литералов в 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',

и т.п.

Другие вопросы по тегам