2021-11-11 18:03:25
.
____ _ _ ____ _____
(_ _( \/ ( _ ( _ )
)( \ / )___/)(_)(
(__) (__)(__) (_____)
люблю ASCII графику и не раз делал для проектов преобразователи пикселей в символы. хотя их уже существует довольно много, всегда есть простор для заморачивания. например, сравните распространённые веб-инструменты и субпиксельный ASCII ребят из underware. посмотрите насколько глубоко можно закопаться даже в таком простом деле:) а если любите rpg и ещё не пробовали ADoM, то качайте и играйте.
ASCII или American Standard Code for Information Interchange введён в шестьдесят третьем году американским институтом стандартизации (ANSI). это схема кодирования символов, в которой за каждым из 128 символов закреплён семизначный набор нолей и единиц. советский вариант названия—КОИ-7 Н0 ГОСТ27463-87
присвоенный каждому знаку порядковый номер можно представить в двоичном виде и уместить в 7 бит. например, буква Т (номер 84) в двоичном выглядит как 1010100, а t (номер 116) — 01110100.
в ASCII оказались 128 распространённых символов:
26 прописных: ABCDEFGHIJKLMNOPQRSTUVWXYZ
26 строчных: abcdefghijklmnopqrstuvwxyz
10 цифр: 0123456789
набор пунктуации: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~(32)
и один пробел.
дополняли набор двадцать девять символов без графики, но необходимых для управлением устройством: BS (переместить позицию печати на символ назад), TAB (горизонтальная табуляция), DEL (стереть последний символ), CR (возврат каретки), NULL (пустой символ) и так далее.
_______
выше ссылался на 7 бит и двоичную систему счисления, поэтому, поэтому остановлюсь на ней чуть подробнее.
мы настолько привыкли к десятичной системе в русском языке, что редко задумываемся как же она работает.
представим число как сумму тысяч, сотен и десятков:
2021 = 2000 + 0 + 20 + 1
2021 = 2*1000 + 0*100 +2*10 +1*1
2021 = 2*10^3 + 0*10^2 + 2*10^1 + 1*10^0
а теперь перейдём в мир где доступны только два положения: да/нет, вкл/выкл, идёт/не идёт ток, 0/1 и поменяем базу. поэтому, вместо 10, будем искать как можно записать число, оперируя степенью 2.
сперва находим самое большое число в череде сумм. 2^11 = 2048, это больше стартового числа, а значит сумма будет складываться, начиная с предыдущей степени.
2021 = 1024 + 512 + 256 + 128 + 64 + 32 + 4 + 1
не нужны числа 16, 8 и 2, но порядок диктует степень, в которую следует возводить базу, поэтому сохраняем его и вместо 1 используем 0 на их месте.
2021 = 1*2^10 + 1*2^9 + 1*2^8 + 1*2^7 + 1*2^6 + 1*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
2021 => 11111100101
чуть подробнее на примере представления десятичного числа
57 в двоичном виде:
сперва определим самое большое число в череде сумм.2^6 = 64.
это больше, чем 57, значит берём предыдущий разряд. 2^5 = 32
так как степень 5, то и записываем в двоичном как 100000: 1*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^ 1+ 0*2^0
продолжаем операции над остатком57 - 32 = 25.
2^4 = 16, а значит следующий знак тоже 1
32 + 16 = 48 = 1*2^5 + 1*2^4 => 110000
57 - 48 = 9
2^3 = 8, а значит снова единица
32 + 16 + 8 => 111000
57 - 56 = 1, то есть осталась только одна степень 2^0 и на конце будет 1*2^0
записываем пропущенные степени:
57 => 111001 в двоичной системе.
нудновато, зато теперь вы знаете как заставить программу что-то сделать, при условии, что у вас только несколько выключателей.
——————————
позднее, при переходе от 7 к 8-битному кодированию, ASCII расширили до кодовых страниц, содержащих 256 (2^8) символов. каждая такая кодовая страница вмещала не только 128 знаков базового US-состава, но и разные национальные символы и буквы местных языков.
интересно была реализована печать знаков с диакритикой. чтобы напечатать á нужно было сперва поставить а, затем вернуться на один символ обратно BS, поставить ' (чаще выглядел как акут «´») и только тогда получался нужный символ.
a BS ' → á
o BS / → ø
ужирнение знаков работало по аналогичному принципу:
a BS a →
a
______
графика в начале сообщения собрана при помощи сервиса AOL Macro Fonts
спасибо геннадию фридману за помощь с материалом
278 viewsNick Nedashkovsky, 15:03