Преобразование десятичных литералов в ASCII-эквивалент для путча в C - PullRequest
2 голосов
/ 22 января 2012

Я пытаюсь понять, почему работает следующее утверждение:

putchar( 1 + '0' );

Кажется, что выражение + '0' преобразует литерал в соответствующую версию ASCII (49 в данном конкретном случае), которой нравится putcharбудет дано.

Мой вопрос был, почему он это делает?Любая помощь приветствуется.Я также прошу прощения, если я сделал какие-либо неверные предположения.

Ответы [ 2 ]

2 голосов
/ 22 января 2012

Это не имеет ничего общего с ASCII.Никто даже не упомянул ASCII.

Что предполагает этот код, так это то, что в кодировке системы все цифры отображаются в виде непрерывного диапазона от '0' до '9', и поэтому при добавлении смещения к символу'0', вы получаете символ для соответствующей цифры.

Все кодировки символов, которые могут использоваться компилятором C или C ++, должны иметь это свойство (например, 2.3 / 3 в C ++), поэтому этот кодявляется портативным.

0 голосов
/ 22 января 2012

Символы '0' до '9' являются последовательными.Стандарт C гарантирует это.

В ASCII:

  • '0' = 48
  • '1' = 49
  • '2' =50

и т. Д.

'0' просто рассматривается как смещение.

  • '0' + 0 = 48, что составляет '0'.
  • '0' + 1 = 49, то есть '1'.

и т. Д.

...