char
- это числовой тип, который также часто используется для представления видимых символов (или специальных невидимых псевдосимволов).'A'
- это значение (с фактическим типом int
), которое можно преобразовать в char
без переполнения или переполнения.То есть это действительно какое-то число, но вам обычно не нужно знать, какое число, поскольку вы обычно используете конкретное значение char
либо просто как число, либо как просто символ, а не оба.
Но эта программа использует char
значения в обоих направлениях, поэтому в некоторой степени имеет значение, какие числовые значения соответствуют видимым символам.Один из способов сделать это очень часто, но не всегда , это использовать значения ASCII , которые пронумерованы от 0
до 127
, или какую-то другую схему, которая использует эти значения плюс дополнительные значениявне этого диапазона.Так, например, если компьютер использует одну из этих схем, то 'A'==65
и 'A'+1==66
, то есть 'B'
.
Эта программа предполагает, что все строчные буквы латинского алфавита имеют числовые значенияв последовательном порядке от 'a'
до 'z'
, и все заглавные буквы латинского алфавита имеют числовые значения в последовательном порядке от 'A'
до 'Z'
, не обращая внимания на то, что именно эти значения.Это верно для ASCII, поэтому он будет работать на многих типах машин.Но нет никакой гарантии, что это всегда будет верно!
C гарантирует, что десятизначные символы от '0'
до '9'
расположены в последовательном порядке, что означает, что если n
- это цифра от нуля додевять включительно, тогда n + '0'
- это символ для отображения этой цифры, а если c
- это такой символ, то c - '0'
- это число от нуля до девяти, которое оно представляет.Но это единственная гарантия, которую язык C дает в отношении значений символов.
Один контрпример приведен в EBCDIC , который сейчас не так широко используется, но использовался в некоторых старыхкомпьютеры, и C поддерживает это.Его буквенные символы расположены в виде последовательности последовательных букв, но не со всеми 26 буквами каждого случая все вместе.Таким образом, программа выдаст неверные результаты при работе на таком компьютере.