ЧИСЛА. ЗАПИСЬ ЧИСЕЛ
      
     Чтобы производить действия с числами, необходимо очень точно понимать, что такое число. Математики со мной, возможно, не согласятся. Но я утверждаю, что число — это количество единиц. Действительно, в окружающем мире числа всегда присутствуют, как количества однородных предметов.
     Вы скажете, а как же дробные числа? Дробные числа часто можно свести к целым числам, если взять за единицу мелкое число. Поясню. Рассмотрим число 2,7 (две целых и семь десятых). Если одну десятую рассматривать как единицу, то число будет целым — 27. (Имеем в виду, что дробные числа описывают протяженности, а не количества однородных предметов. А протяженность — это число единичных протяженностей, поэтому если единичная протяженность будет меньше, то есть возможность выбрать ее так, что исследуемая протяженность будет выражена целым числом. Количество же однородных предметов — это всегда целое число.)
     Проблему иррациональных чисел я игнорирую, как абстракцию, не влияющую на изложение данной темы.
     Математики называют числа 0, 1, 2, 3 и так далее — натуральными (природными, natura — лат., природа). Это числа, выражающие количества однородных предметов.
     Теперь я буду утверждать, что число и запись числа — это разные вещи. Действительно, взять число 327. Как количество это — триста двадцать семь единиц, но как запись это — три символа. Таким образом, число и его человеческая запись — это разные не тождественные друг другу объекты.
     Как записывать числа? Это проблема для первобытного человека, мы же это усваиваем это еще в детстве и больше никогда не задумываемся на нашими действиями, направленными на запись чисел. А зря.
     Если число выражает количество предметов, то естественно записать число как последовательность палочек. Например, число 12 записать как 111111111111. Как видно, запись занимает много места, и пустое множество предметов в такой системе обозначается пустым местом. Но пустое место — это и пробел между словами, и случайный пропуск, и специально стертый текст. Так записывать числа крайне неудобно.
     Поэтому люди довольно давно придумали систему записи, в которой каждому множеству единиц соответствует свой символ. В древнеримском исполнении это следующие символы: I (1), V (5), X (10), L (50), C (100), D (500), M (1000), дальше не знаю. Теперь поделив в уме реальное количество на модельные (стандартные) множества, можно записать число просто перечислив модельные множества в каком-то порядке и без него. Например, две тысячи семнадцать (2017) можно представить как MMXVII. Знака пустого множества опять нет.
     В Индии придумали записывать пустое множество кружочком, теперь это наш знак нуля. А еще индийцы придумали еще девять стандартных множеств, для обозначения которых были отдельные символы. Теперь вместе с знаком нуля мы называем их цифрами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 в современном начертании. Примечательно, что арабское слово щифр, от которого произошло русское слово цифра (и слово шифр тоже), обозначает нулевое количество, буквально «ничто».
     Но в такой системе главное не символы, а порядок их записи. Рассмотрим подробнее. Мы проговариваем числа, уже в уме поделив их на модельные множества (единицы, десятки, сотни, тысячи, миллионы…), называемые разрядами. То есть реальное количество предметов мы уже в уме представляем как сумму некоторых множеств. И проговаривать число начинаем с количества самого большого множества в нем. Например, одна тысяча девятьсот семьдесят три — сначала количество крупных множеств, потом количество множеств поменьше, потом еще меньше, и в конце совсем маленькие множества — число единиц. И при записи мы отдельными символами записываем сначала число крупных множеств, потом число множеств поменьше, потом самые маленькие.
     1973
     Замечаем при этом, что наши стандартные множества оказались равны степеням десятки.
     При попытке записать количество реальных предметов мы в уме стараемся его разделить на стандартные множества и записываем их количество цифрами по убыванию объёма множеств слева направо.
     1973 = 1·103+9·102+7·101+3·100
     Теперь представим себе, что стандартные множества являются степенями не десятки, а восьмерки. Это будут такие.
     80=1
     81=8
     82=64
     83=512
     84=4096
     И так далее.
     Давайте теперь мысленно разобьем число 1973 на эти множества, то есть узнаем их количество в числе. Мы получим, что множеств по 80 там 1973, множеств по 81 оказалось 246, множеств по 82 — 30, множеств по 83 — всего 3, а множеств по 84  нет вовсе.
     Заметим, что 3·83=1536. Если из исходного числа удалить 1536, то останется 437.
     В 437 содержится 6 множеств по 82 (384=6·82). Удалим 384 единицы, входящих в эти множества из 437, получим 437–384=53.
     В 53 содержится 6 множеств по 81.
     53–48=5
     Пять оставшихся единиц не вошли ни в одно более крупное множество.
     Итак, в числе 1973 есть 3 множества по по 83 и 6 множеств по 82 и 6 множеств по 81 и 5 единиц (множеств по 80). Давайте запишем количества множеств слева направо по убыванию объема множеств. Получим
     3665
     Произведем те же действия.
     3·83+6·82+6·81+5·80=
=1536+384+48+5=1973
     Что же получилось? Мы взяли другие стандартные множества, получили другую запись, но число осталось тем же самым! Значит, числа можно записывать по-другому.
     Подойдем теперь к этому с другой стороны. В таблице сверху вниз организуем порядковый счет от нуля до 23 в крайнем левом столбце. А в следующем столбце организуем порядковый счет в системе из 8 цифр: 0, 1, 2, 3, 4, 5, 6, 7. Других цифр нет. Но правило осталось: если число больше чем самая большая цифра, то оно записывается как единица в старшем разряде, а в предыдущем разряде записывается ноль. У нас это числа 10, 20 и так далее.
     В следующем столбце мы организуем счет в системе с всего пятью цифрами, а в последнем столбце — в системе с двумя цифрами: 0 и 1. Вот что получилось.
     Таблица 1.
10 цифр 8 цифр 5 цифр 2 цифры
0 0 0 0
1 1 1 1
2 2 2 10
3 3 3 11
4 4 4 100
5 5 10 101
6 6 11 110
7 7 12 111
8 10 13 1000
9 11 14 1001
10 12 20 1010
11 13 21 1011
12 14 22 1100
13 15 23 1101
14 16 24 1110
15 17 30 1111
16 20 31 10000
17 21 32 10001
18 22 33 10010
19 23 34 10011
20 24 40 10100
21 25 41 10101
22 26 42 10110
23 27 43 10111

     Упражнение 1
     Цифр может быть и больше, чем 10. Просто для цифр больше 9 у нас нет собственных символов, поэтому принято обозначать их символами английского алфавита. Так цифра 10 будет A, цифра 11 — B, цифра 15 — F и так далее. Практическое применение имеет только шестнадцатеричная система счисления.
     Дополните представленную выше таблицу двумя столбцами: порядковый счет в системе из 12 и 16 цифр.


    Упражнение 2     (для тех, кто не понял предыдущий текст)

ПОЗИЦИОННАЯ СИСТЕМА СЧИСЛЕНИЯ

    Упражнение 3

    Упражнение 4

ПЕРЕВОД ДЕСЯТИЧНЫХ ДРОБНЫХ ЧИСЕЛ В ДРУГИЕ СИСТЕМЫ СЧИСЛЕНИЯ (в ЕГЭ пока не встречается)

     Дробная часть в десятеричной системе состоит из числа множеств по одной десятой, одной сотой и так далее. Возьмем число 0,875. В нем 8 десятых, 7 сотых, 5 тысячных, или математически
     0,875=8·10–1+7·10–2+5·10–3
     В восьмеричной системе счисления дробная часть будет складываться из множеств по 8–1, 8–2, 8–3 и так далее. В двоичной системе дробная часть складывается из множеств по 2–1, 2–2, 2–3 и так далее.
     Как выделить эти множества? Для этого разработан алгоритм, заключающийся в последовательном умножении дробной части на основание необходимой системы счисления. Умножая первый раз, в целой части произведения мы получаем количество множеств (цифру) первого дробного разряда. После умножения оставшейся дробной части получаем в целой части произведения цифру второго дробного разряда. Отбрасывая целую часть, продолжаем умножать дробную часть на основание системы счисления, пока дробная часть не обнулится.
     1) 0,875×2 = 1,750    0,12
     2) 0,750×2 = 1,500    0,112
     3) 0,500×2 = 1,000    0,1112
     Номер действия (номер шага) является номером дробного разряда, а целая часть произведения — значением разряда данного номера.

ВНИМАНИЕ! МЕТОДЫ БЫСТРОГО ПРЕОБРАЗОВАНИЯ МЕЖДУ ДВОИЧНОЙ, ВОСЬМЕРИЧНОЙ И ШЕСТНАДЦАТЕРИЧНОЙ СИСТЕМАМИ СЧИСЛЕНИЯ
     Следует уяснить одну вещь: из таблицы 1 следует, что трехзначное двоичное число может быть передано одной восьмеричной цифрой. Действительно, 0112=38, 1112=78. Так разбивая двоичное число на тройки цифр справа налево, каждую тройку цифр можно записать одной восьмеричной цифрой. Это метод троек для быстрого преобразования записи числа между двоичной и восьмеричной системами.
     Из таблицы упражнения 1 должно быть видно, что четырехзначное двоичное число может быть представлено одной шестнадцатеричной цифрой. Например, 01012=516, 11102=E16. Это основание для быстрого метода преобразования записи чисел между двоичной и шестнадцатеричной системами.
     Пример. 21210=110101002
     11|010|1002=3248
     1101|01002=D416

КОДИРОВАНИЕ ЧИСЕЛ В КОМПЬЮТЕРЕ И СТРОЕНИЕ КОМПЬЮТЕРНОЙ ПАМЯТИ

     Базовый элемент компьютерной памяти представляет собой полупроводниковый прибор — триггер, который способен сохранять состояние «под напряжением» или «без напряжения» в течение всего периода работы компьютера. Состояние «под напряжением» считается единицей, состояние «без напряжения» считается нулем. Один триггер сохраняет 1 бит информации.
     Много ли чисел можно сохранить в таком элементе? Нет, всего два: 0 и 1. Компьютер же должен выполнять операции над любыми числами. Поэтому 8 триггеров объединяют в одну единую ячейку памяти. Эта ячейка сохраняет 1 байт числовой информации.
     1 байт = 8 бит
     Представить себе ячейку памяти можно как следующую таблицу
               
     Каждая клеточка символизирует 1 триггер, хранящий либо 0, либо 1.
     Для удобства пронумеруем биты справа налево с нуля до семи. Бит номер 7 называется старшим. Бит номер 0 называется младшим, и именно он имеет номер, называемый адресом ячейки памяти.
     Если бит сохраняет в себе единицу, то его называют установленным. Если в бите записан ноль, то говорят, что бит сброшен.
     В таком представлении удобно кодировать целые числа без знака в двоичной системе счисления. Самый старший разряд 27 располагается в старшем бите. Разряд 20 хранится в младшем бите. Чтобы представить себе число в однобайтовой ячейке, достаточно расставить нули и единицы в клеточках таблицы слева направо, также как мы пишем числа на бумаге.
  1 1     1   1
     26+25+22+20 = 64+32+4+1 = 101.
     Запись самого большого числа состоит из восьми единиц: по единице в каждом бите, все биты установлены.
     27+26+25+24 +23+22+21+20 = 255.
     Запись самого маленького числа состоит из восьми нулей, все биты сброшены: 00000000 = нулю. Таким образом, в восьмибитовую ячейку можно записать 255 чисел с единицами и нуль, то есть всего 256 чисел.
     Как записать большие числа? Это можно сделать, используя две и более восьмибитовых ячеек, следующих в компьютерной памяти подряд.
    
    Упражнение 5

Кодирование положительных и отрицательных целых чисел

     Существует три кода для чисел, содержащих знак.
     Прямой код формируется следующим образом. Знак числа кодируется значением старшего бита. Если старший бит сброшен, то число положительное. Если старший бит установлен, то число отрицательное.
     Пример прямого восьмибитового кода числа +27
     00011011
     Пример прямого восьмибитового кода числа –27
     10011011
     Положительные числа в памяти компьютера представлены прямым кодом.
     Следует обратить внимание, что количество битов, в которых сохраняется модуль числа со знаком, меньше, чем для натуральных чисел (без знака) вследствие выделения одного бита на кодирование знака.
     Для отрицательных чисел строится обратный код по правилу: обращается значение всех битов кроме старшего.
     Пример обратного восьмибитового кода числа –27
     11100100
     Дополнительный код отрицательных чисел формируется путем сложения единицы и обратного кода.
     Для –27
       11100100
     +             1
       11100101     дополнительный код числа –27
     Отрицательные числа в памяти компьютера хранятся в дополнительном коде.
     Еще один пример.
     Число –120
     Восьмибитовый прямой код 11111000
     Восьмибитовый обратный код 10000111
       10000111
     +             1
       10001000
     Восьмибитовый дополнительный код    10001000
    
    Упражнение 6

КОДИРОВАНИЕ СИМВОЛЬНОЙ И ТЕКСТОВОЙ ИНФОРМАЦИИ
    
    Буквы, знаки препинания, знаки арифметических операций, наконец, сами цифры ― всё это символы. Без символов невозможно организовать взаимодействие человека и компьютера, так как невозможно передать объёмные сообщения.
    Каждый символ вырисовывается на экране компьютера специальной программой, которая входит в состав любой операционной системы.
    Как же хранить символ в памяти компьютера? Каждому символу сопоставляется число ― его номер в так называемой кодовой таблице. Ее фрагмент представлен в таблице ниже.

символ

символ

символ

символ

50 2 55 7 60 65 A
51 3 56 8 61 = 66 B
52 4 57 9 62 > 67 C
53 5 58 : 63 ? 68 D
54 6 59 ; 64 @ 69 E

     Вся кодовая таблица доступна в числе служебных программ операционной системы. Сначала кодировки были восьмибитовые и могли описывать 256 символов. Затем создали 16-битовые кодировки, современная кодировка Unicode создана без ограничений на длину кода.
     Следует иметь в виду, что пробел и знак окончания абзаца тоже являются символами и имеют свои коды. Знак окончания абзаца в обычном режиме работы текстовых редакторов не воспроизводится на экране.
    
    ⚠Единицы больших объемов информации

     Тексты бывают очень длинными, поэтому измерять объем компьютерной памяти байтами становится неудобно. Чтобы большие объемы памяти выражать меньшими числами, вводятся производные единицы информации кратные байтам.
     1 килобайт = 1024 байтов = 210 байтов
     1 мегабайт = 1024 килобайтов = 210 килобайтов
     1 гигабайт = 1024 мегабайтов = 210 мегабайтов
     1 терабайт = 1024 гигабайтов = 210 гигабайтов
    
    Упражнение 7

КОДИРОВАНИЕ ЗВУКА

КОДИРОВАНИЕ ГРАФИЧЕСКОЙ ИНФОРМАЦИИ
      
     В системах проектирования применяется так называемая векторная графика. Каждый элемент изображения представляет собой математический объект (отрезок, дуга, плоскость, часть сферы, параллелепипед и др.), имеющий свое строгое расположение и поворот, относительно системы координат трехмерного образа. Одной из характеристик является цвет. Такое изображения можно рассматривать с разных сторон, меняя точку зрения (ракурс).
     Для кодирования фотографий применяется метод растра. Растр — это прямоугольник, состоящий из мелких клеточек — пикселей (сокращение от pictures element — элемент изображения). Каждый пиксель имеет характеристику — цвет. Растровое изображение формируется на плоскости, и не может быть рассмотрено с иных ракурсов.
     Растровое изображение можно рассматривать как таблицу, значениями ячеек которой является закодированный в число цвет.
     Один из подходов к кодированию цвета основан на восприятии человеком трех маленьких светящихся тел: красного, зеленого и синего, имеющих разную яркость. Это цветовая схема RGB. В ней с помощью чисел задается отдельно яркость красного, зеленого и синего «фонарика». При кодировании цвета на интернет-страницах яркость цветовых компонент задается однобайтовым числом от минимума 0 до максимума 255.
     Например, RGB(255,0,0) кодирует красный цвет максимальной яркости), RGB(0,0,0) — это черный цвет, RGB(255,255,0) — это желтый цвет максимальной яркости.
     В настоящее время в эту цветовую палитру добавлен канал непрозрачности — альфа-канал. В этом случае добавляется четвертое число. Например, RGBA(255,0,0,255) — это абсолютно непрозрачный красный цвет максимальной яркости.
     Так как один канал занимает в памяти А байт, то один пиксель занимает в памяти А умноженное на число каналов i. Весь файл растрового изображения занимает память равную числу N пикселей умноженную на объем одного пикселя, то есть NAi. Число пикселей в растре определяется как площадь прямоугольника xy, число пикселей по горизонтали умножить на число пикселей по вертикали.
     В итоге объем растрового изображения в несжатом файле будет
     V=xyAi
     Число цветов в палитре определяется количеством двоичных чисел в объеме памяти одного пикселя Ai. То есть, если у нас 3 цветовых канала по одному байту на канал, то всего на цвет отводится 3 байта или 24 бита. В 24 битах можно записать 224 чисел, столько будет и цветовых оттенков в палитре.
    
    Упражнение 8

КОЛИЧЕСТВО ИНФОРМАЦИИ В СООБЩЕНИИ

    Упражнение 9

ДВОИЧНОЕ КОДИРОВАНИЕ АЛФАВИТОВ

     Равномерные коды получаются, если каждый сигнал алфавита кодируется одинаковым количеством битов. Но! Чем больше алфавит, тем больший объем памяти занимает текст. Если это не важно, то преимуществом равномерного кода является лёгкость его декодирования (прочтения). Так кодируются символы в компьютере.
     При передаче закодированного сообщения возникают ошибки. Некоторые из ошибок можно установить и попросить повторить передачу.
     Помехоустойчивое кодирование реализуют следующим образом.
     В некоторой информационной системе алфавит кодируется двоичными шестиразрядными словами. При передаче данных возможны их искажения, поэтому в конец каждого слова добавляется седьмой (контрольный) разряд таким образом, чтобы сумма разрядов нового слова, считая контрольный, была чётной. Например, к слову 110011 справа будет добавлен 0, а к слову 101100 — 1. После приёма слова проверяется сумма его разрядов, включая контрольный. Если она нечётна, это означает, что при передаче этого слова произошёл сбой, и оно автоматически заменяется на зарезервированное слово 0000000. Если она чётна, это означает, что сбоя не было или сбоев было больше одного. В этом случае принятое слово не изменяется.
     Исходное сообщение 1100101 0001001 0011000 было принято в виде 1100111 0001100 0011000. Как будет выглядеть принятое сообщение после обработки?
     0000000  0001100  0011000
      
     Неравномерные коды получаются, если сигналы алфавита кодируются двоичным словом разной длины. Например, А — 00, Б — 011, В — 10 и так далее. Это позволяет однозначно декодировать сообщение, если отсутствует специальный сигнал его конца. Это имело значение в старой телефонии при дисковом наборе номера, когда набор номера не завершался нажатием специальной кнопки. Кроме того, если самым часто встречающимся буквам дать короткие кодовые слова, а редким буквам дать длинные кодовые слова, то объём памяти для сообщения получится сильно сократить.
     Но! Как декодировать такие сообщения?
     Роберт Фано доказал условия, которым должен удовлетворять неравномерный код для однозначного прочтения.
     Никакое кодовое слово не может быть началом другого кодового слова. (Префиксные коды, они считываются с начала слова.) Или никакое кодовое слово не может быть концом другого кодового слова. (Это для постфиксных кодов, которые считываются с конца слова.)
     Например, если есть кодовое слово 0, то в префиксном коде кодовые слова 01, 001, 011 уже невозможны. Возможен 10.  Код 101 уже невозможен. Но возможен префиксный код 11. Поэтому неравномерные коды всегда длинные для кодирования больших алфавитов.
     Пример.
     Для кодирования некоторой последовательности, состоящей из букв Л, М, Н, П, Р, решили использовать неравномерный двоичный код, удовлетворяющий условию, что никакое кодовое слово не является началом другого кодового слова. Для букв Л, М, Н использовали соответственно кодовые слова 00, 01, 11. Для двух оставшихся букв – П и Р – кодовые слова неизвестны. Укажите кратчайшее возможное кодовое слово для буквы П, при котором код будет удовлетворять указанному условию. Если таких кодов несколько, укажите код с наименьшим числовым значением.
     Возможные варианты:100, 101, 1001, 1010, 1011.
     Ответ: 100.
     Теперь для буквы P возможны варианты 101, 1010, 1011 или ещё длиннее. А больше букв закодировать по условию Фано трёхзначным словом нельзя. Чтобы это стало очевидно, нужно построить два варианта двоичного дерева: один начать с 1 другой с 0. Деревья покажут все возможные комбинации.
    
    Упражнение 10

КОДИРОВАНИЕ IP-АДРЕСОВ

    Упражнение 11