Подтвердить что ты не робот

Xoring буквы алфавита с символом пробела

Есть ли историческая причина, почему Xoring любая буквенная буква с символом пробела изменяет случай буквы? (т.е. 'a' xor '' = 'A', 'F' xor '' = 'f' и т.д.)

Или это просто совпадение?

(Предполагая, что символы кодируются ASCII- или Unicode.)

4b9b3361

Ответ 1

Я уверен, что было преднамеренно, что случай может быть изменен путем изменения одного бита - это сделает раннее программное обеспечение намного более эффективным. Тот факт, что символ пробела # 32 не имеет значения.

Ответ 2

Из записи wikipedia в ASCII:

Сам код был структурирован так, что большинство управляющих кодов были вместе, и все графические коды были вместе, для удобства идентификация. Первые два столбца (32 позиции) были зарезервированы для управляющие символы. [19] "Космический" персонаж должен был появиться раньше графики, чтобы упростить сортировку, поэтому она стала позицией 20hex; [20] для по той же причине многие специальные знаки, обычно используемые в качестве разделителей, были помещается перед цифрами. Комитет решил, что важно поддержка 64-символьных алфавитов в верхнем регистре и выбор шаблона ASCII поэтому его можно легко сократить до пригодного для использования 64-символьного набора графических коды. [21] Поэтому буквы нижнего регистра не чередуются с верхний регистр. Чтобы сохранить параметры для строчных букв и других графики, специальные и числовые коды были установлены до буквы, а буква "A" была помещена в позицию 41hex, чтобы соответствовать проект соответствующего британского стандарта [22]. Цифры 0-9 были упорядочены так, чтобы они соответствовали значениям в двоичном формате с префиксом 011, делая преобразование с двоично-кодированным десятичным простым.

Итак, кажется, что поведение - счастливое совпадение.

Ответ 3

Хорошая точка

ASCII - это ребенок из кодов, используемых электромеханическими телетайперами, обычно известными под торговой маркой Teletype.

У этих машин не было активной электроники... они использовали барабаны, двигатели и кулачки и около миллиона металлических деталей для печати символов верхнего регистра. У них было несколько компонентов RLC и различные реле.

Было довольно преднамеренно, что только один бит отделяет символы верхнего и нижнего регистра. Таким образом, системы передачи и хранения могут использовать 6 бит вместо 7.

На самом деле вам не нужен XOR, вы можете использовать OR или ADD для получения диапазона нижнего регистра.

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

Вот довольно старый, восстановленный в рабочем состоянии.

Ответ 4

Это просто особенность букв ASCII и некоторых других наборов букв, распределенных аналогичным образом. Для подавляющего большинства алфавитных символов в Unicode это просто не происходит. Например, À является U + 0100, ā является U + 0101. В общем случае букву нижнего и верхнего регистров обычно выделяют на последовательные позиции кода. И большинство буквенных символов в Юникоде не имеют строчной или прописной концепции.

Ответ 5

Это не совпадение, оно всегда верно.

   Example:  hex of 'a' = 61  hex of space = 20 XOR 'a' and space = 41 = 'A' (in hex)
   same as:  hex of 'z' = 7A  hex of space = 20 XOR 'z' and space = 5A = 'Z' (in hex)