Есть ли какая-то логика в упорядочении кодов ASCII? - PullRequest
39 голосов
/ 16 июля 2009

Я преподавал C моему младшему брату, изучающему инженерное дело. Я объяснял ему, как разные типы данных на самом деле хранятся в памяти. Я объяснил ему, что стоит за наличием чисел со знаком / без знака и бита с плавающей запятой в десятичных числах. В то время как я рассказывал ему о типе символа в C, я также провел его через систему кодов ASCII, а также о том, как char также хранится как номер 1 байта.

Он спросил меня, почему 'A' был присвоен код 65 ascii, а не что-нибудь еще? Точно так же почему «а» дается код 97 конкретно? Почему между диапазоном заглавных и строчных букв существует 6 кодов ascii? Я понятия не имел об этом. Можете ли вы помочь мне понять это, так как это вызвало у меня большое любопытство. До сих пор я не нашел ни одной книги, в которой обсуждалась бы эта тема.

В чем причина этого? Логически организованы коды ASCII?

Ответы [ 7 ]

72 голосов
/ 16 июля 2009

Существуют исторические причины, в основном, для простоты конвертации кодов ASCII:

Цифры (от 0x30 до 0x39) имеют двоичный префикс 110000:

0 is 110000
1 is 110001
2 is 110010

и т.д.. Таким образом, если вы уничтожите префикс (первые два '1), вы получите цифру в двоичном десятичном формате.

Заглавные буквы имеют двоичный префикс 1000000:

A is 1000001
B is 1000010
C is 1000011

и т.д.. То же самое, если вы удалите префикс (первый '1'), вы получите алфавитно-индексированные символы (A - 1, Z - 26 и т. Д.).

Строчные буквы имеют двоичный префикс 1100000:

a is 1100001
b is 1100010
c is 1100011

и т.д.. То же, что и выше. Поэтому, если вы добавите 32 (100000) к заглавной букве, у вас будет строчная версия.

10 голосов
/ 16 июля 2009

На этой диаграмме это хорошо видно из википедии: обратите внимание на два столбца элемента управления 2 верхнего 2 нижнего, а затем пробелы, заполненные разным. ASCII Chart on Wikipedia

Также имейте в виду, что ASCII был разработан на основе того, что прошло раньше. Подробнее об истории ASCII см. в этой превосходной статье Тома Дженнингса , в которую также входит значение и использование некоторых незнакомых управляющих символов.

6 голосов
/ 16 июля 2009

Вот очень подробная история и описание кодов ASCII: http://en.wikipedia.org/wiki/ASCII
Короче говоря:

  • ASCII основан на стандартах кодирования телепринтера
  • первые 30 символов «непечатаемые» - используются для форматирования текста
  • затем они продолжают печатать символы, примерно по порядку их расположения на клавиатуре. Проверьте вашу клавиатуру:
    • пробел,
    • заглавные буквы на числовых заглавных буквах:!, ", #, ...,
    • цифры
    • знаки, обычно размещаемые в конце строки клавиатуры с цифрами - верхний регистр
    • заглавными буквами в алфавитном порядке
    • знаки, обычно размещаемые в конце строк клавиатуры с буквами - верхний регистр
    • строчными буквами в алфавитном порядке
    • знаки, обычно размещаемые в конце строк клавиатуры с буквами - строчные буквы
5 голосов
/ 16 июля 2009

Расстояние между A и a равно 32. Это довольно круглое число, не так ли?

Разрыв в 6 символов между заглавными и строчными буквами объясняется тем, что (32–26) = 6. (Примечание: в английском алфавите 26 букв).

0 голосов
/ 16 июля 2009

Wikipedia

Сам код был структурирован так, чтобы большинство контрольных кодов были вместе, и все графические коды были вместе. первые два столбца (32 позиции) были зарезервировано для управляющих символов. [14] «Космический» персонаж должен был прийти перед графикой сделать сортировку Алгоритмы просты, поэтому стало положение 0x20. [15] Комитет решил, что это важно поддерживать верхний регистр 64-символьные алфавиты, и выбрали структура ASCII, так что это может быть легко сокращено до полезного набора из 64 символов графических кодов. [16] Нижний регистр поэтому письма не чередуются в верхнем регистре. Чтобы параметры оставались открытыми для строчных букв и прочего графика, специальные и числовые коды были помещены перед буквами, и буква «А» была помещена в положение 0x41, чтобы соответствовать проекту соответствующий британский стандарт. [17] Цифры 0–9 были размещены таким образом, чтобы они соответствовали значениям в двоичный с префиксом 011, что делает преобразование с двоично-десятичным простой.

0 голосов
/ 16 июля 2009

Если вы посмотрите на двоичные представления для 'a' и 'A', вы увидите, что они отличаются только на 1 бит, что весьма полезно (переход от прописных букв к строчным или наоборот просто вопрос листать немного). Зачем начинать именно там, я понятия не имею.

0 голосов
/ 16 июля 2009
  • 'A' равно 0x41 в шестнадцатеричной системе.
  • 'a' равно 0x61 в шестнадцатеричной системе.
  • '0' до '9' - это 0x30 - 0x39 в шестнадцатеричной системе.

Так что, по крайней мере, легко запомнить цифры для A, a и 0-9. Я понятия не имею о символах. См. Статья в Википедии об упорядочении ASCII .

...