Как построить двоичную запись числа
Перейти к содержимому

Как построить двоичную запись числа

  • автор:

Двоичная система счисления

Вспомним материал по системам счисления. В нём говорилось, что наиболее удобной системой счисления для компьютерных систем является двоичная система. Дадим определение этой системе:

Двоичной системой счисления называется позиционная система счисления, у которой основанием является число 2.

Для записи любого числа в двоичной системе счисления используются всего лишь 2 цифры: 0 и 1.

Общая форма записи двоичных чисел

Для целых двоичных чисел можно записать:

Данная форма записи числа «подсказывает» правило перевода натуральных двоичных чисел в десятичную систему счисления: требуется вычислить сумму степеней двойки, соответствующих единицам в свёрнутой форме записи двоичного числа.

Правила сложения двоичных чисел

Основные правила сложения однобитовых чисел

0+0=0
0+1=1
1+0=1
1+1=10

Отсюда видно, что и, как и в десятичной системе счисления, числа, представленные в двоичной системе счисления, складывают поразрядно. Если разряд переполняется, единица переносится в следующий разряд.

Пример сложения двоичных чисел

Правила вычитания двоичных чисел

0-0=0
1-0=0
10-1=1

Но как быть с 0-1=? Вычитание двоичных чисел немного отличается от вычитания десятичных чисел. Для этого используется несколько способов.

Вычитание методом заимствования

Запишите двоичные числа друг под другом – меньшее число под большим. Если меньшее число имеет меньше цифр, выровняйте его по правому краю (так, как вы записываете десятичные числа при их вычитании).
Некоторые задачи на вычитание двоичных чисел ничем не отличаются от вычитания десятичных чисел. Запишите числа друг под другом и, начиная справа, найдите результат вычитания каждой пары чисел.

Вот несколько простых примеров:

1 — 0 = 1
11 — 10 = 1
1011 — 10 = 1001

Рассмотрим более сложную задачу. Вы должны запомнить только одно правило, чтобы решать задачи на вычитание двоичных чисел. Это правило описывает заимствование цифры слева, чтобы вы могли вычесть 1 из 0 (0 — 1).

В первом столбце справа вы получаете разность 0 — 1. Для ее вычисления необходимо позаимствовать цифру слева (из разряда десятков).

Во-первых, зачеркните 1 и замените ее на 0, чтобы получить такую задачу: 1010 — 101 = ?
Вы вычли («позаимствовали») 10 из первого числа, поэтому вы можете написать это число вместо цифры, стоящей справа (в разряд единиц). 101100 — 101 = ?
Вычтите цифры в правом столбце. В нашем примере:
101100 — 101 = ?

Правый столбец: 10 — 1 = 1.
102 = (1 x 2) + (0 x 1) = 210 (цифры нижнего регистра обозначают систему счисления, в которой записаны числа).
12 = (1×1) = 110.

Таким образом, в десятичной системе эта разность записывается в виде: 2 — 1 = 1.

Вычтите цифры в оставшихся столбцах. Теперь это легко сделать (работайте со столбцами, двигаясь, справа налево):

101100 — 101 = __1 = _01 = 001 = 1.

Вычитание методом дополнения

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

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

Рассмотрим пример: 1011002 — 111012= ?

Если значность чисел разная, к числу с меньшей значностью слева припишите соответствующее количество 0.

1011002 — 0111012= ?

В вычитаемом числе поменяйте цифры: каждую 1 поменяйте на 0, а каждый 0 на 1.

0111012 → 1000102.

На самом деле мы «забираем дополнение у единицы», то есть вычитаем каждую цифру из 1. Это работает в двоичной системе, так как у такой «замены» может быть только два возможных результата: 1 — 0 = 1 и 1 — 1 = 0.

К полученному вычитаемому прибавьте единицу.

1000102+ 12 = 1000112

Теперь вместо вычитания сложите два двоичных числа.

1011002 +1000112= ?

Проверьте ответ. Быстрый способ – откройте двоичный онлайн калькулятор и введите в него вашу задачу. Два других метода подразумевают проверку ответа вручную.

1) Переведем числа в двоичную систему счисления:
Допустим, что из числа 1011012 нужно вычесть 110112

2) Обозначим как A число 1011012 и как B число 110112.

3) Запишем числа A и B столбиком, одно под другим, начиная с младших разрядов (нумерация разрядов начинается с нуля).

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode

Двоичная система счисления: как переводить, как реализовать на C и C#

Что такое двоичная система счисления?

Это такая бинарная система счисления (бинарная, потому что у неё имеется лишь два основания, т. е. две цифры — «0» и «1»), которая используется в самой основе компьютера, так как в компьютерных схемах, процессорах, платах имеются, так называемые, выключатели (или биты). Если на какой-либо схеме выключатель поставлен в позицию выкл., то ему соответствует цифра «0», если вкл. — «1». Благодаря таким вот массовым чередованиям позиций вкл\выкл и соответствующим им единиц и нулей и работают абсолютно все компьютеры.

Последовательность этих цифр, приводящая к каким-либо результатам в работе компьютера, называется машинным кодом — это самый сложный и самый низкий язык программирования, но раньше люди умудрялись программировать и на нём. Сейчас же эти коды обрамляются в более легкие и понятные ключевые слова, и формы, которые в последствии составляют различные языки программирования. Абсолютно все языки программирования в своей основе имеют под собой работу машинного кода, любая функция, любой оператор, любой метод записан в машинном коде в виде огромной последовательности единиц и нулей. Любой printf в С или Console.WriteLine обязательно разлагаются для компьютера на машинный код, только так он и может понять, что мы от него хотим.

Переводом исходного кода какого-либо языка программирования в машинный код занимается компилятор.

Алгоритм перевода в двоичную систему счисления из десятеричной.

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

Итак, например, у нас имеется число 12 в десятеричной системе счисления, давайте переведем его в двоичную. Можно сделать это несколькими формами записи, кому как удобно.

Рассмотрим первый вариант. Он будет похож на несколько видоизменённое деление в столбик, и выглядеть будет вот так:

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Теперь разберём, что тут написано. Сначала мы, как и в делении в столбик, пишем число, которое мы хотим делить (12), и число, на которое делим (в двоичной системе счисления это всегда 2).

12, делённое на 2 без остатка будет равно 6. Записываем это как положено в делении в столбик.

Итак, теперь стоит сказать самое главное о переводе чисел из десятичной системы счисления в двоичную: если число делится на двойку без остатка, то мы пишем ноль, если с остатком — единицу.

Рассмотрим это правило поподробнее. Мы уже сказали, что 12 / 2 =6. Остатка у нас нет. Значит мы пишем ноль. В данном методе разбора мы пишем его под цифрой 6.

Кусочек двоичного кода мы уже получили. Вычисляем дальше.

Теперь мы делим 6 на 2. Получается 3, и опять деление прошло без остатка — опять мы пишем, уже под тройкой, ноль.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Теперь делим 3 на 2. На этот раз мы понимаем, что получается ответ с остатком — 1 и 0.5. Если происходит такое, то мы откидываем полученный остаток и делим полученное число без остатка на два, при этом подписываем ниже единицу.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Далее нам стоит запомнить, что мы всегда делим последнюю единицу на два. Всегда после того или иного вычисления двоичного числа у нас так или иначе в итоге получается число 1 (как на примере, при делении 3 на 2). И абсолютно всегда мы его делим на 2. И абсолютно всегда последней цифрой в последовательности наших нулей и единиц будет цифра 1, так как все числа в двоичной системе счисления начинаются с единицы (исключение — 0, в двоичной системе счисление он и будет записан как 0).

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Мы поделили наше число 12, и у нас получилась последовательность: два нуля и две единицы. Однако это ещё не всё. Последний аспект, который надо запомнить — мы считываем двоичное число снизу вверх .

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Поэтому мы считаем нашу последовательность «с конца», и у нас получается число 1100. Это и есть ответ.

Теперь давайте рассмотрим вторую форму записи такого деления. Она менее громоздка, но по сути является той же самой формой деления.

Двоичная система счисления: как переводить, как реализовать на C и C# - vscode.ru

Здесь мы просто делим получаемые числа на два через черту, и, если частное получается без остатка, через тире пишем 0, если с остатком — 1. Опять же не забываем округлять числа с остатком в меньшую сторону, делить последнюю единицу на двойку и считывать последовательность в обратном порядке.

Реализация перевода числа из десятичной системы счисления в двоичную на языке C#

Реализация перевода десятичного числа в двоичное в C# невероятно проста и понятна. Отвечает за эту реализацию метод Convert.ToString, и выглядеть это будет вот так:

Системы счисления

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

  • Что такое системы счисления
  • От десятичных чисел к двоичным
  • Зачем нужна двоичная система
  • Как переводить двоичные числа в десятичные
  • Как переводить десятичные числа в двоичные
  • Шестнадцатеричная система счисления
  • Восьмеричная система счисления
  • Конвертация чисел в программах
  • Сервисы для перевода из системы в систему
  • Заключение

Что такое системы счисления

С давних пор людям нужно было записывать числа. В торговле числа нужны, чтобы знать, сколько товаров есть на складе и сколько денег принесла сделка. Записи о положении небесных тел помогли шумерам составить первый календарь, а календарь, в свою очередь, пригодился, чтобы заранее готовиться к посевным и сбору урожая. Строительные сметы, переписи населения, распределение наследства — числа оказались очень востребованными даже в самых древних государствах.

Так что люди научились записывать числа в незапамятные времена. Небольшие числа легко записывались зарубками или насечками, но если в числе несколько знаков, требуется иная система записи. Эту проблему в разных странах решали по-разному.

Сейчас разные способы записи чисел называются системами счисления.

Систем счисления было придумано довольно много, и даже в наши дни мы используем две системы, возникшие в далёкой древности. Из Древнего Рима к нам пришла римская система счисления, где цифры обозначаются буквами латинского алфавита. За основу римляне взяли количество пальцев на одной руке — 5, и на двух руках — 10. Числа 1, 5 и 10 в римской системе обозначаются буквами I, V и X, и с помощью них можно записать любое число от 1 до 49. Например, VII это 7, а XIX — 19.

От Древних Шумеров мы научились делить дроби на шестьдесят частей. Именно из-за них в нашем часе 60 минут, а в минуте 60 секунд. Шумерская система счисления так и называется — шестидесятеричная. Но, конечно, наиболее привычной выглядит численная запись в системе, которую придумали в Древней Индии. Сейчас ее называют арабской или десятичной системой счисления.

От десятичных чисел к двоичным

Разберемся, как устроена десятичная система, на примере произвольного большого числа.

1072

Это четырехзначное число, потому что оно состоит из четырёх цифр. И, поскольку речь идёт о десятичной системе, мы можем использовать десять различных цифр.

0123456789

Величина, которая скрывается за каждой цифрой, зависит от её позиции, поэтому такую систему счисления называют также и позиционной. Справа мы записываем самые младшие значения — единицы, слева от них десятки, затем сотни, и так далее. Запись 1702 означает буквально следующее.

1×1000+7×100+0×10+2×1

Цифры, записанные в соседних позициях, различаются в десять раз — это и есть десятичная система. Однако, как мы говорили ранее, привычная нам десятичная система — далеко не единственная. Однако, опираясь на неё, нам будет проще понять принципы работы других систем счисления. Например, для записи того же самого числа 1702 в двоичной системе надо придерживаться тех же правил, но вместо десяти цифр нам потребуется всего две — 0 и 1.

Цифры, записанные в соседних позициях, будут различаться не в десять раз, а в два. То есть там, где в десятичной системе мы видим 1, 10, 100, 1 000, 10 000, в двоичной будут числа 1, 2, 4, 8, 16 и так далее.

1×1024+1×512+0×256+ +1×128+0×64+1×32+0×16+ +0×8+1×4+1×2+0×1

Это очень большое двоичное число. Давайте запишем его в привычной форме:

1 1 0 1 0 1 0 0 1 1 0 1024 512 256 128 64 32 16 8 4 2 1

Это число могло бы быть очень большим десятичным числом, потому что состоит из тех же цифр. Чтобы отличать двоичные числа от десятичных, в качестве индекса у них указывают основание системы счисления, то есть 2.

11010100110₂

Это особенно важно, когда в тексте одновременно встречаются десятичные и двоичные числа.

11010100110₂ = 1702

Зачем нужна двоичная система

Двоичная система выглядит очень непривычно и числа, записанные в ней, получаются огромными. Зачем она вообще нужна? Разве компьютеры не могут работать с привычной нам десятичной системой?

Оказывается, когда-то они именно так и работали. Самый первый компьютер ENIAC, разработанный в 1945 году, хранил числа в десятичной системе счисления. Для хранения одной цифры применялась схема, которая называется кольцевым регистром, она состояла из десяти радиоламп.

Чтобы записать все числа до миллиона — от 0 до 999 999 — надо шесть цифр, значит, для хранения таких чисел нужно целых 60 ламп.

Кольцевой регистр

Инженеры заметили, что если бы они кодировали числа в двоичной системе, то для хранения таких же больших чисел им бы потребовалось всего двадцать радиоламп — в три раза меньше!

Первое преимущество двоичных чисел — простота схем. Второе, и не менее важное — быстродействие. Сложение чисел, хранящихся в кольцевом регистре, требует до десяти тактов процессора на каждую операцию. Сложение двоичных чисел можно выполнить за один такт — то есть в десять раз быстрее.

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

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

Зачем изучать двоичную систему, если компьютер делает всю работу за нас? Иногда программистам приходится писать программы, которые работают напрямую с оборудованием. Например, разработчики игр должны знать, как работают видеокарты, чтобы сделать компьютерную графику быстрее. А разработчики операционных систем понимают, как устроены диски, чтобы надежно хранить данные.

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

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

Как переводить двоичные числа в десятичные

Разберемся, как быстро переводить двоичные числа в десятичные. Для примера потребуется достаточно большое двоичное число, чтобы мы не могли вычислить его на пальцах.

11010

Запишем его в математической записи, помня, что вместо основания 10, мы используем основание 2.

1×16+1×8+0×4+1×2+0×1

Из этого примера видно, что у всех слагаемых только два множителя — 0 и 1. Слагаемые с множителем 0 равны нулю, поэтому их можно отбросить, оставив только слагаемые с множителем 1.

1×16+1×8+1×2

У слагаемых с множителем 1 этот множитель можно не записывать.

16+8+2

Теперь нетрудно посчитать сумму.

26

Вывод: число 11010 в двоичной записи — то же самое, что 26 в десятичной.

11010₂=26

Ещё раз повторим, как перевести двоичное число в десятичное.

  • Записать число в математическом виде
  • Отбросить слагаемые с множителем 0
  • Сложить результат

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

Двоичное число Степень 2 Десятичное число
1 2 2 0 1
10 2 2 1 2
100 2 2 2 4
1000 2 2 3 8
1 0000 2 2 4 16
10 0000 2 2 5 32
100 0000 2 2 6 64
1000 0000 2 2 7 128
1 0000 0000 2 2 8 256
10 0000 0000 2 2 9 512
100 0000 0000 2 2 10 1 024
1 0000 0000 0000 0000 2 2 16 65 536
1 0000 0000 0000 0000 0000 0000 2 2 24 16 777 216
1 0000 0000 0000 0000 0000 0000 0000 0000 2 2 32 4 294 967 296

С помощью этой таблицы можно переводить числа из двоичной системы в десятичную практически «в уме».

11010₂=10000₂+1000₂+10₂=16+8+2=26

Как переводить десятичные числа в двоичные

Эта задача похожа на математическую загадку, и её можно встретить на олимпиаде для школьников.

Чтобы научиться её решать, давайте ещё раз посмотрим на первые натуральные числа в двоичной и десятичной записи.

Десятичное число Двоичное число
1 1 2
2 10 2
3 11 2
4 100 2
5 101 2
6 110 2
7 111 2
8 1000 2
9 1001 2

Обратим внимание на следующую закономерность: все чётные числа — 2, 4, 6 и 8 — в двоичной записи заканчиваются на 0. Все нечётные числа 1, 3, 5, 7 и 9 — на 1. Этому есть простое объяснение — в двоичной записи число 2 это как 10 в десятичной. Если двоичное число делится на два, оно круглое. Математики говорят, что чётные числа делятся на 2 без остатка (или с остатком 0), а нечётные — с остатком 1:

  • при делении 4 на 2 остаток 0;
  • при делении 5 на 2 остаток 1;
  • при делении 6 на 2 остаток 0;
  • при делении 9 на 2 остаток 1.

Попробуем перевести десятичное число 26 в двоичную систему. Для этого используем деление уголком на 2.

Перевод десятичного числа в двоичное

Если 26 разделить на 2, то в результате получится 13, остаток от деления 0. Продолжаем дальше:

  • 13 разделить на 2, в результате получится 6, остаток от деления 1;
  • 6 разделить на 2, в результате получится 3, остаток от деления 0;
  • 3 разделить на 2, в результате получится 1, остаток от деления 1;
  • 1 разделить на 2, в результате получится 0, остаток от деления 1;

Из остатков 1, 1, 0, 1 и 0 складывается нужная нам двоичная запись.

11010

Шестнадцатеричная система счисления

Мы знаем, что компьютер использует числа для представления любой информации. Например, цвета хранятся в виде трёх чисел — яркости красной, зелёной и синей компонентов цвета. На каждый компонент отводится восемь двоичных позиций, поэтому максимальная яркость компонента равна 11111111₂ или 255. Цвет целиком описывается большим 24-х разрядным двоичным числом, например, 11111010 10000000 01110010. Это цвет Salmon из таблицы цветов HTML, он же лососевый цвет.

Лососевый цвет

Старшие восемь позиций отводятся для хранения красного компонента, средние восемь — зелёного, и младшие восемь — синего. Мы видим, что такая запись очень громоздка и неудобна.

Кажется, что цвет удобнее записать как десятичное число 16416882. Хотя оно занимает меньше места, по нему трудно понять, какова яркость каждого компонента.

Чтобы записывать большие двоичные числа, программисты придумали использовать шестнадцатеричную систему счисления:

  • В десятичной системе десять цифр, а в шестнадцатеричной — шестнадцать
  • В десятичной системе соседние позиции отличаются в десять раз, а в шестнадцатеричной — в шестнадцать раз

Как и в случае с двоичной системой, цифры 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9 заимствуются из десятичной системы. Но в данном случае этих цифр не хватает: нужно ещё шесть. Их в шестнадцатеричной системе принято обозначать первыми буквами английского алфавита:

Основание 16 Основание 10 Основание 2
0 0 0
1 1 1
2 2 10
3 3 11
4 4 100
5 5 101
6 6 110
7 7 111
8 8 1000
9 9 1001
A 10 1010
B 11 1011
C 12 1100
D 13 1101
E 14 1110
F 15 1111

Шестнадцатеричная система счисления хороша тем, что группа из четырёх двоичных цифр кодируется одной шестнадцатеричной цифрой. Таким образом, лососевый цвет выглядит как:

1111 1010 1000 0000 0111 0010

В шестнадцатеричной системе счисления он записывается так:

FA 80 72

Вначале трудно понять, каков порядок у шестнадцатеричного числа FA. Как и в случае с двоичными числами, программисты обычно помнят порядки круглых шестнадцатеричных чисел. Но можно не запоминать, а подглядывать в эту таблицу:

Шестнадцатеричное число Десятичное число
10 16 16
20 16 32
30 16 48
40 16 64
50 16 80
60 16 96
70 16 112
80 16 128
90 16 144
A0 16 160
B0 16 176
C0 16 192
D0 16 208
E0 16 224
F0 16 240
100 16 256
1000 16 4 096
1 0000 16 65 536
10 0000 16 1 048 576
100 0000 16 16 777 216
1000 0000 16 268 435 456
1 0000 0000 16 4 294 967 296

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

Восьмеричная система счисления

Восьмеричная система когда-то использовалась наравне с шестнадцатеричной. Из названия понятно, что она использует всего восемь цифр: 0, 1, 2, 3, 4, 5, 6 и 7. Восьмеричная система подходит для представления шести-, девяти- и двенадцатиразрядных двоичных чисел.

Такие числа встречаются нечасто. Один из самых известных примеров использования восьмеричных чисел — права доступа в операционной системе UNIX. Они записываются девятизначным двоичным числом, например 110100100 или 111101100. Запоминать и передавать такие числа неудобно, поэтому программисты предпочитают восьмеричную систему счисления, и записывают права доступа в виде 644 или 754.

Популярные операционные системы Linux и MacOS берут своё начало в UNIX, поэтому там права доступа также задаются восьмеричным числом.

stat и chmod

Пользователи UNIX используют команду stat, чтобы узнать права доступа, и команду chmod, чтобы изменить их. На рисунке вы видите, что команды stat и chmod используют восьмеричные числа. Подробный рассказ об этих командах выходит за рамки нашей статьи. Узнаете больше о правах доступа, и о том, что означают эти числа, можно изучив командную строку Linux.

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

Конвертация чисел в программах

Языки программирования умеют работать с числами, записанными в разных системах счисления, и переводить их из одной системы в другую. Для примера рассмотрим работу с разными системами счисления на Python и JavaScript.

Python

Чтобы записать в Python двоичное число, добавьте перед ним префикс 0b. Десятичное число 26 можно записать в виде 0b11010. У шестнадцатеричных чисел префикс 0x, а у восьмеричных — 0o.

print(0b11010) # => 26 print(0x1a) # => 26 print(0o32) # => 26 

Во всех случаях, чтобы записать число, мы пишем сначала цифру ноль «0», а затем букву, которая определяет систему счисления. Буква «b» — первая в слове binary (двоичный), а буква «o» — в слове octal (восьмеричный). Буква «x» выбивается из общего правила — это третья буква в слове hexadecimal (шестнадцатеричный).

Функции bin() , hex() и oct() преобразуют число в двоичную, шестнадцатеричную и восьмеричную системы.

print(bin(26)) # => '0b11010' print(hex(26)) # => '0x1a' print(oct(26)) # => '0o32' 

Благодаря префиксной записи и функциям bin() , hex() и oct() , мы можем преобразовывать числа из любой системы в любую.

print(hex(0o32)) // >= '0x1a' 

JavaScript

В JavaScript для представления чисел используются те же самые префиксы, что и в Python. 0b11010, 0x1a и 0o32 — записи числа 26 в двоичной, шестнадцатеричной и восьмеричной системах счисления.

console.log(0b11010) // => 26 console.log(0x1a) // => 26 console.log(0o32) // => 26 

Для преобразования чисел в другую систему счисления нужно вызывать метод toString() , передав в качестве параметра основание системы.

Обычно в JavaScript мы можем вызвать метод у объекта с помощью точки. Например, если мы сохранили число в переменной i , мы можем узнать его шестнадцатеричное представление, вызвав метод i.toString(16) . Но мы не можем вызывать метод у числа 2 — 2.toString(16) — потому что в JavaScript точка в записи чисел разделяет целую и дробную части. Если дробная часть равна нулю, её можно не записывать, поэтому «2.» означает то же самое, что и «2.0».

В примере вы видите три корректных способа обойти эту проблему, и вызвать метод toString() у числа 26.

console.log((26).toString(2)) // => '11010' console.log(26..toString(16)) // => '1a' console.log(26 .toString(8)) // => '32' 

Сервисы для перевода из системы в систему

Существует множество сервисов для перевода чисел из системы в систему. Это умеет даже Google. Чтобы перевести двоичное число, например, 11010 в десятичную систему, надо ввести запрос 0b11010 decimal.

0b11010 decimal

Чтобы перевести десятичное число, например, 26 в двоичную систему, надо ввести запрос 26 binary.

26 binary

Обратите внимание, что Google использует префикс 0b, чтобы отличать двоичные числа от десятичных.

Чтобы перевести десятичное число 137 в шестнадцатеричную систему, введите запрос 137 hex.

137 hex

Чтобы перевести шестнадцатеричное число 2BAD в десятичную систему, введите запрос 0x2BAD decimal.

0x2BAD decimal

Google использует префикс 0x для того, чтобы отличать шестнадцатеричные числа от всех прочих. Чтобы перевести число 121 в восьмеричную систему, введите запрос 121 octal.

121 octal

Чтобы перевести число обратно, введите в строке поиска запрос 0o171 decimal.

0o171 decimal

Мы видим, что Google для представления чисел в двоичной, шестнадцатеричной и восьмеричной системах счисления использует такие же префиксы, которые мы видели в примерах на Python и JavaScript.

Заключение

Люди изобрели разные способы записывать числа. Мы называем их системами счисления. Привычный для нас способ записи называется десятичной системой счисления.

Компьютеры, которые работали в десятичной системе, оказались сложными и медленными. Хранение чисел в двоичной системе позволило упростить схемы и ускорить работу компьютеров.

Обычно нам не нужно знать, как именно компьютер хранит числа, потому что он умеет переводить их в привычную нам форму. Но если мы хотим разрабатывать программы, которые работают с оборудованием напрямую — системные утилиты или компьютерные игры, — нужно разобраться, как устроены двоичная и шестнадцатеричная системы.

Существует ряд алгоритмов, которые помогают перевести число из одной системы в другую, но они достаточно запутанные. Проще использовать Google.

Двоичная запись чисел очень громоздкая, поэтому программисты предпочитают записывать числа в шестнадцатеричной системе счисления. Восьмеричная запись чисел сейчас используется очень редко.

Вы можете конвертировать числа из системы в систему на своём любимом языке программирования.

Как построить двоичную запись числа

Двоичной системой счисления называется позиционная система счисления с основанием 2.

Двоичный алфавит : 0 и 1.

Для целых двоичных чисел можно записать:

Правило перевода целых десятичных чисел в двоичную систему счисления

Компактное оформление

Двоичная арифметика

Двоичная арифметика намного проще десятичной, т.к. перенос возникает в единственном случае — при двух единицах в одноименных разрядах.

Двоичное сложение

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

Двоичное вычитание

При выполнении операции вычитания всегда из большего по абсолютной величине числа вычитается меньшее и у результата ставится соответствующий знак.

Двоичное умножение

Операция умножения выполняется с использованием таблицы умножения по обычной схеме (применяемой в десятичной системе счисления) с последовательным умножением множимого на очередную цифру множителя.

Рассмотрим примеры на умножение.

При выполнении умножения в примере 2 складываются три единицы 1+1+1=11 в соответствующем разряде пишется 1, а другая единица переносится в старший разряд.

В двоичной системе счисления операция умножения сводится к сдвигам множимого и сложению промежуточных результатов.

Двоичное деление

Операция деления выполняется по алгоритму, подобному алгоритму выполнения операции деления в десятичной системе счисления.

Двоичная система для чайников ⁠ ⁠

Я решил сделать серию постов по информатике для чайников.

Если первый пост пойдёт хорошо, то будет еще несколько в том же духе.

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

Основа основ современного компьютера – ДВОИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ (2-СС). Звучит угрожающе. Чтобы понять, что такое ДСС, и научиться с ней работать, надо уметь складывать, умножать и возводить числа в степень. Ок, даю шпаргалку.

Сложение чисел

Пусть у нас есть какое-то число. Допустим, 5. И мы хотим прибавить к нему другое число. Допустим, 3. Как нам это сделать? Давайте, представим число 5 как пять палочек:

А число 3 как три палочки:

Чтобы сложить их, сначала нарисуем пять палочек, потом допишем к ним еще три:

Теперь пересчитаем – получилось 8.

Зря смеётесь! Когда считаем палочками – в Википедии это называется (ВНИМАНИЕ! НЕНОРМОТИВНАЯ ЛЕКСИКА!) «Единичная непозиционная система счисления с единичным весовым коэффициентом». Ну, или попросту будем называть УНАРНАЯ СИСТЕМА СЧИСЛЕНИЯ (1-СС).

В обычной жизни мы (люди) пользуемся ДЕСЯТЕРИЧНОЙ СИСТЕМОЙ СЧИСЛЕНИЯ (10-СС). Она так называется, потому что у нас есть десять цифр. К тому же, она еще и ПОЗИЦИОННАЯ, что означает, что значение (вес) цифры зависит от её положения в записи числа, например, в числах 2, 21 и 211 цифра 2 означает, соответственно, единицы, десятки и сотни.

Десятичная система счисления

Как мы складываем в 10-СС? Например, столбиком:

Сначала складываем единицы: 2+9 = 11, т.е. при сложении двух единичных чиселок появился новый десяток. Ясное дело, что из них может появиться только один десяток, потому что самое большое, что можно сложить – это 9+9 = 18. Таким образом, разбиваем сложение на кусочки: вместо 12+99 мы делаем 2+9 + 10+90, т.е. единицы и десятки (а потом и сотни) складываем отдельно друг от друга:

12 + 99 = [разобьем на разряды]

= (2+9) + (10+90) = [сложим первые разряды]

= 11 + (10+90) = [снова разобьем на десятки и единицы]

= (1 + 10) + (10 + 90) = [снова перегруппируем, чтобы отделить десятки от единиц]

= 1 + (10 + 10 + 90) = [сложим десятки]

= 1 + (110) = [разобьем на сотни и десятки]

Ясно, что получится 111, но давайте остановимся и посмотрим на эту полученную форму записи:

Фишка в том, что любое число можно представить как сумму отдельно единиц, отдельно десятков, сотен и т.д., например:

564 = 500 + 60 + 4, 7031 = 7000 + 000 + 30 + 1

Особенность такой записи в том, что мы видим во всех разрядах одну значащую цифру (первую), все следующие за ней цифры – это нули. Запомните этот момент – это важно.

При этом вместо того, чтобы писать 1000, мы можем написать 10^3 (т.е. десять в третьей степени, что можно расшифровать как 10*10*10).

7000 = 7*1000 = 7 * 10^3

А всё число 7031 можно расписать так:

7031 = 7*10^3 + 0*10^2 + 3*10^1 + 1*10^0

Напомню, что любое число в нулевой степени даёт единицу, и 10^0 = 1, а любое число в первой степени даёт само себя 10^1 = 10. Еще напомню, что любое число умноженное на 0 даёт 0, т.е. 0*10^2 = 0.

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

Краткое отступление. Дорогие мои! Не путайте числа и цифры! Путать цифры и числа – это как путать буквы и звуки. Цифра – это просто символ для записи чисел. А число – это абстрактная величина, обычно означающее количество чего-нибудь. Думаю, все поняли. ��

Двоичная система счисления

Теперь, поговорим о 2-СС. Её особенность в том, что в ней есть всего 2 символа для записи чисел: 0 и 1. Что интересно, при этом любое число, которое можно записать в 10-СС, так же можно записать и в 2-СС, и даже в 1-СС!

Двоичная система тоже позиционная и отличается от десятичной тем, что в ней вместо 10 в степень возводится двойка, например, число двоичное число 101101 можно прочитать так:

101101= 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0

= 32 + 0 + 8 + 4 + 0 + 1 = 45 (это уже в десятичной системе)

Теперь давайте поскладываем в двоичной системе.

Начнём с простого: 0+0 = 0, 1+0 = 1, 0+1 = 1

Ничего удивительного, в 10-СС это точно так же выглядит.

Теперь посложнее: 1 + 1 = 10

Ой! Почему десять.

А вот никакие не ДЕСЯТЬ! Это число ДВА. Просто в двоичной записи.

Дальше: 10 + 1 = 11

Нет. Это не десять плюс один! Это два плюс один! В 10-СС это выглядит так: 2 + 1 = 3, а в 1-СС так: || + | = |||. Ясно –понятно?

Усложняем программу: 11 + 1 = ?

Хм… сложновато? Давайте упростим! По той же схеме, что и 12 + 99. Не забываем, что всё это в двоичной системе!

11 + 1 = [разобьем на разряды]

= (10 + 1) + 1 = [перегруппируем]

= 10 + (1 + 1) = [О! “1+1” складывать умеем!]

= 10 + 10 = [ну, здесь просто сначала игнорируем нули, складываем 1+1 и потом приписываем 0 к результату]

Ну, сколько можно. Это не СТО. Если то же самое записать в 10-СС, то получим: 3 + 1 = 4. Т.е. это 100 в записи 2-СС – это ЧЕТЫРЕ.

Ну, и для закрепления материала сложим в 2-СС:

= (1000 + 100 + 00 + 1) + (1000 + 000 + 00 + 1)

= (1000 + 1000) + (100 + 000) + (00 + 00) + (1 + 1)

= (10000) + (100) + (00) + (10)

= (10000) + (100) + (00 + 10)

А по-русски: 13 + 9 = 22

Большое спасибо! Очень хорошо объяснили. Всё понял.

Ложка дёгтя портит бочку мёда. Я споткнулся на этом -Теперь посложнее: 1 + 1 = 10

Ой! Почему десять.

А вот никакие не ДЕСЯТЬ! Это число ДВА. Просто в двоичной записи. И дальше нет объяснения почему и как. Естественно дальше идут примеры сложнее, но т.к. этот простой непонятен. Дальше залазить в дебри

поделитесь, пожалуйста, еще постами по информатике если есть

Computer Science | что читать/смотреть⁠ ⁠

Приветствую, давно хотел написать пост об изучения Computer Science, рассмотреть пару тем, рассказать об интересных уч.материалах. К тому же здесь превалируют русскоязычные уч. материалы, что достаточно редкая история(но об английском будет пару слов, без него, к сожалению, никуда).

Этот пост — последний вышедший на моем канале в телеге https://t.me/tobeprog (там об изучении программирования).

Какие варианты roadmap-ов по cs бывают

Кажется крайне позитивной идеей, перед началом любого подобного материала ссылаться на уже существующие roadmap-ы/планы изучения.

Прямо оттуда пара примеров:

John Washam имел достаточно успешную карьеру, но у него была мечта — попасть в гугл. Его отделяло от нее отсутствие образования и знаний в сфере computer science, собственно весь roadmap — это его подготовка к собеседованию и обретение этих знаний с нуля.

Очень известный проект, опенсорсный университет. Они ориентируются именно на вузовскую программу cs.

1. Ввод в computer science

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

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

1.2. «Код», Петцольд

Эта книга — ввод в архитектуру, разбирается всё, буквально от подачи тока по проводкам и заканчивая высокоуровневыми языками программирования.

Но куда интересней другая особенность книги — здесь с легкостью ловится эффект, когда ты понял одну часть, но уже забыл прошлую, и надо все заново, и все удерживать в голове и т.д. При этом сама книга написана простым языком, не подразумевает никаких предварительных знаний по теме и досконально разбирает каждый момент. Вы как бы учитесь работать со сложной системой, находясь при этом в комфортных условиях(это буквально необходимый навык для дальнейшего изучения cs, наверно, он даже важнее самой темы книги).

Ко всему прочему CS50 и «Код» Петцольда — идеальное сочетание. CS50 мало про архитектуру, а Код отлично ложится на ввод в computer science. Поэтому рекомендую ознакомится с книгой как можно раньше.

1.3. Missing Semester

[Перевод, на данный момент переведено 2 из 11 частей]Пропущенный семестр курса по компьютерным наукам — https://missing-semester-rus.github.io/

Есть куча инструментов, которые предположительно должен знать студент после изучения Computer Science, обычно это оставляют для самостоятельного изучения, тут же наоборот решили сакцентировать на них внимание(и сэкономить кучу времени студентам).

2. Подготовка к изучению cs

2.1. Про английский

Раз уж, в Missing Semester соприкосновения с иностранным языком не избежать, обсудим эту тему сейчас. Так уж получилось, английский — это необходимость для изучения cs. Хорошая новость в том, что для уч.материалов на английском не нужен уровень Disco Elysium.

Я не лингвист, поэтому рассуждений на тему почему так, выдать не могу. Но точно могу сказать, что для многих становится настоящим открытием то, насколько простой английский используют в тех же лекциях по тех.специальностям. Если получается смотреть какие-нибудь ситкомчики(условных “Друзей”) в оригинале, то и лекции условного MIT по алгоритмам тоже потяните(к тому же, у лекций могут быть конспекты, субтитры, да даже контекст повествования).

Знание языка, даже на каком-нибудь Intermediate, уже огромное преимущество, и если есть возможность каким-то образом подтянуть язык, то это однозначно стоит сделать.

2.2. Выбор языка

Все сводится к 2 вариантам: более классический — си, более простой — питон. Вообще можно выбрать и любой другой, но так уж сложилось, что большинство уч.материалов крутятся вокруг этих двух.

Начнем с питона, основное преимущество — можно быстро писать сложные программы или их рабочие прототипы. В cs очень важно не просто изучать теорию, но и мочь что-то сделать, что называется “покрутить” это, поэкспериментировать, понять принцип работы на практике.

Не буду расписывать каждый, уже кучу всего про них написал, как и про подбор правильных уч.материалов, все есть в посте.

Поэтому, сразу к Си. Сразу скажу, в моем понимании, изучении Си без ассемблера — крайне странная идея, и из того же gdb изучающий вообще вылезать не должен. Но это достаточно хардкорный подход, в котором для начинающего уж слишком много процесса исследования(что может сильно запутать).

Нет особого смысла расписывать книги по Си, в любой подборке будет фигурировать тот же Прата, мимо основных пройти невозможно, вместо этого расскажу о куда более интересном и малоизвестном материале.

https://stepik.org/course/73618 — один из лучших курсов по Си, найденный мной весьма странным образом. Дело в том, что автор курса написал книгу, с тем самым правильным в моем понимании подходом(сишечка через ассемблер), самой книги нет на русском, но гугл неожиданно привел меня на степик, где курс можно сказать спрятался(не привязан к какой-либо организации, на обложке милейший котик, и всего 2к учащихся, поэтому на самом сайте его приметить затруднительно).

К сожалению, сам курс без ассемблера, но он все же очень хорош. Cложный, глубокий, про современный подход к разработке(это прям редкость). Тут главное не торопиться, и постепенно, вникая во все(это оч. важно), двигаться по курсу.

2.3. А оно точно вам нужно?

Этот вопрос стоит задавать перед изучением любого топика/темы cs. И уж точно, перед комплексным изучением всего предмета. Да, вроде как лишних знаний не бывает, но вот что бывает, так это зря потраченное время(в случае с cs, очень и очень большое).

Почему я вообще поднял этот вопрос? Если кратко, ища разные материалы на тему cs, очень уж часто я видел крайне спорные утверждения из разряда: “каждый программист должен знать”. И если подобное утверждение выходит далеко за пределы основ, то я советую очень и очень осторожно к нему относиться.

Особенно, если изначально не стоит задачи разобраться в той или иной области, а ее изучения связано с получением, например, будущей профессии. Сделайте ресерч, посмотрите действительно ли это необходимое требование(предположу, что в большинстве случаев — нет).

2.4. Изучение от практики

Одна из самых примечательных особенностей изучения cs сейчас, это — возможность изучать некоторые темы от практики. Начинать с небольших “игрушечных” проектов и потихоньку увеличивать сложность, все больше и больше приближаясь к настоящим.

Даже без подборок и прочего, туториалы с ними легко гуглятся. Например, запрос “Lisp interpreter python” и первый же результат:

http://norvig.com/lispy.html (How to Write a (Lisp) Interpreter (in Python)) статья Питера Норвига, где буквально за 90 строк он пишет и объясняет очень простой интерпретатор Lisp

https://habr.com/ru/post/115206/ — перевод этой статьи, также будет на первой странице выдачи

Это отличный вариант для старта. А что потом? Ну например, есть продолжении этой статьи с улучшенной версией интерпретатора:

https://norvig.com/lispy2.html (An ((Even Better) Lisp) Interpreter (in Python)) все также первая страница выдачи, там же будут и другие варианты.

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

2.5. Количество тем

Чтобы этот пост не стал слишком уж большим, я взял самые популярные темы, они входят, если так можно выразиться, в классические топики cs. Получилось 5(Алгоритмы, Математика, Архитектура, Операционные системы, Языки программирования и компиляторы). Не знаю насколько вообще тема поста интересна, если хорошо зайдет, то сделаю еще 5, навскидку: сети, бд, графика и т.д

Computer Science | что читать/смотреть

3. Алгоритмы

3.1. Алгоритмы. Руководство по разработке, Стивен Скиена — считаю лучшим вариантом, замечательная книга. Кроме того, что она великолепно написана, в ней есть куча ссылок на другую отличную литературу, можно очень глубоко погрузиться в тему.

3.2. Грокаем алгоритмы, Адитья Бхаргава — хороший вариант для совсем начинающих.

3.3. Структуры данных и алгоритмы Java, Роберт Лафоре — классика, не смущайтесь ЯПа в названии, вообще хорошая литература по алгоритмам к ЯПам не привязана, они лишь лучше иллюстрируют рассказанное, в случае Лафоре, рассказанное настолько понятно, что Java точно не станет проблемой.

Но если нужно именно на определенном ЯПе, то разумеется есть репозиторий с кучей алгоритмов и реализаций на разных ЯПах — https://github.com/TheAlgorithms/Python/blob/master/DIRECTORY.md

3.4. Алгоритмы. Вводный курс, Томас Кормен — почему то все время забывают про эту книгу, и сразу отсылают к большой работе того же автора ‘Алгоритмы. Построение и анализ’, эта книга, куда легче и возможно, станет ступенькой к основному труду автора.

3.5. https://stepik.org/course/217 — Алгоритмы: теория и практика. Методы

https://stepik.org/course/1547 — Алгоритмы: теория и практика. Структуры данных

Два отличных курса от CSC, оба мультиязычные

3.6. Есть один курс на английском, который я не могу не упомянуть:

Introduction to Algorithms(MIT), он большой(это мягко сказано), но зато очень детальный, и объясняют все достаточно понятно, ко всему прочему этот курс только часть из серии Массачусетских курсов по алгоритмам, сразу за ним идет не менее приятный — Design and Analysis of Algorithms.

Еще к этому можно добавить кучу отличных статей, кучу объяснений сложных моментов простым языком, всякие ресурсы с задачками и т.д. и т.п. В плане поиска уч.материалов — изучение алгоритмов не доставит проблем.

4. Математика

Лучше изучать математику под конкретную цель. Т.е. в тот момент, когда приходит понимание, что для дальнейшего изучения другой темы необходимо ее(математику) подтянуть.

Но, как бы это помягче сказать, может сложиться ситуация, когда и подтягивать то нечего, настолько с математикой дружба не склеилась. В таком случае, наверно стоит почитать что-то популярное, пускай не относящееся к дискретной математике(cs крутится вокруг неё), просто чтобы понять, что это не такая страшная штука.

4.1. Парочка таких книг:

Красота в квадрате, Алекс Беллос

Удовольствие от х, Стивен Строгац

Теория игр, Авинаш Диксит, Барри Нейлбафф

Что такое математика? Рихард Курант, Герберт Роббинс

После/параллельно, стоит посмотреть что-то из разряда “математика для взрослых/минимум для абитуриента тех.вуза”. Главное, чтобы подобные ликбезы не стали в тягость.

Как и говорилось выше, в cs все крутится вокруг дискретной математики

4.2. Дискретная математика для программистов, Род Хаггарти — наверно, сейчас это лучший вариант введения в предмет.

4.3. На степике довольно много курсов по дискретной математике, возможно кому то такой формат будет удобней.

https://stepik.org/course/125 — Основы перечислительной комбинаторики

4.4. Перед курсом про алгоритмы(из прошлого раздела) в MIT читают курс, который так и называется Mathematics for Computer Science.

5. Архитектура

5.1. «Код», Петцольд — книга из введения, если по каким то причинам еще не прочитана, то самое время это сделать.

5.2. Архитектура компьютера, Таненбаум — буквально фундамент, очень важная книга. Она куда сложнее Петцольда, но это, можно сказать, другой уровень. По сути, Петцольд в разрезе изучения архитектуры — подготовка к этой книге.

5.3. Архитектура компьютера и проектирование компьютерных систем, Дэвид Паттерсон, Джон Хеннесси — еще одна фундаментальная книга. Вполне может составить конкуренцию Таненбауму.

Честно сказать, не вижу смысла писать о других уч.материалах. Последние 2 книги просто вне всякой конкуренции. И даже близко никакой другой курс/книга не подобрался.

6. Операционные системы

6.1. https://stepik.org/course/1780 — Операционные системы, отличный курс, с него вполне можно начать.

6.2. https://github.com/tuhdo/os01 — Operating Systems: From 0 to 1, книга, отличный ввод в тему, к сожалению, только на английском.

6.3. https://littleosbook.github.io/ — The little book about OS development, великолепная книга, именно по разработке операционок, теорию же авторы рекомендуют брать из того же Таненбаума. Тоже только на английском.

6.4. Собственно, Современные операционные системы, Таненбаум, Бос — книга, разумеется, абсолютный мастрид для желающих разобраться в вопросе, но она очень и очень сложная, поэтому крайне не рекомендую начинать с нее, посмотрите варианты которые выше, попишите всякие мелкие проекты(благо туториалов куча), и только потом стоит приступать.

6.5. Если интересует Linux, точно не стоит проходить мимо Ядро Linux. Описание процесса разработки, Роберт Лав

7. Языки программирования и компиляторы

7.1. Разумеется, есть книга дракона Компиляторы: принципы, технологии и инструменты, Ахо, Лам, Ульман, Сети — здесь та же история, что с операционками Таненбаума, абсолютный мастрид, но к нему следует хорошенько подготовиться.

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

Начать с того самого “подхода от практики”, потихонечку увеличивать сложность, пока не станет ясно, что необходимо более глубокое понимание теории. Отправная точка у всех разная, благо туториалов разной сложности столько, что без проблем можно найти подходящий.

7.2. https://ruslanspivak.com/lsbasi-part1/ — отличный вариант для старта, Цикл из 19 статей, в котором автор, пишет интерпретатор языка Pascal на Python.

7.3. https://github.com/DoctorWkt/acwj — автор репозитория пишет компилятор, при этом подробнейшим образом объясняя каждый шаг.

Нейронные сети. Формулы обратного распространения⁠ ⁠

Представляем заключительную лекцию из курса по нейронным сетям от 3blue1brown. В этой лекции речь пойдет о формулах обратного распространения. Одной из важных тем, которая позволит разобраться с основными моментами дифференцирования сложных функций в контексте сетей.

Благодарим за создание выпуска:

Переводчика – Федора Труфанова;

Редактора – Михаила Коротеева;

Диктора – Никифора Стасова;

Монтажера – Олега Жданова

Нейронные сети. Обратное распространение ошибки⁠ ⁠

Привет, Лига образования!

Мы продолжаем переводить легендарный курс по нейросетям от 3blue1brown.

В предыдущей лекции мы узнали о градиентном спуске. Сегодня речь пойдет о методе обратного распространения — главном алгоритме обучения нейронных сетей.

Благодарим за создание выпуска:

Редактора – Михаила Коротеева;

Диктора – Никифора Стасова;

Монтажера – Олега Жданова

И бонус в комментариях, английский!

Нейронные сети. Градиентный спуск: как учатся нейронные сети⁠ ⁠

Обучение — сложный процесс не только для человека, но и для сущностей, порожденных разумом человека.

Мы подготовили долгожданное продолжение лекций по нейросетям. Градиентный спуск: как учатся нейронные сети.

Благодарим за участие в выпуске:

Редакторов – Дмитрия Титова, Михаила Коротеева, Дмитрия Мирошниченко;

Корректора – Дмитрия Мирошниченко;

Дикторов – Никифора Стасова, Дарью Яговкину;

Монтажера – Олега Жданова.

Разговор о системах счисления:
— Программист подарил своей женщине 5 роз, сказав «эта 101 роза тебе» (двоичная). Пещерный человек, подарил бы три розы, сказав «бери эти 111 роз» (унарная).
— То есть неандертальца от программиста отличает всего лишь ноль?
— Ну вообще введение 0 было огромным шагом для математики. Можно сказать первый мощный шаг к абстрактному мышлению. Так что в какой-то степени да, «0» — это переходная ступень между неандертальцем и программистом.

Нейронные сети. Просто о сложном⁠ ⁠

Привет, Пикабу. Сегодня у нас кое-что действительно классное для Лиги образования.

Мы договорились о переводе и озвучке с автором самых крутых на Youtube видео про математику-информатику-физику.

И наша первая озвучка — видео о том, что же такое нейросети.

За это отличную озвучку мы благодарим Александра Колдаева.

Если хочешь поучаствовать в переводе или озвучке — напиши нам в вк, телеграм или facebook.

Карты наук⁠ ⁠

Dominic Walliman — ютубер, автор научно-популярных книг по физике, PhD (вроде кандидата наук) по «quantum device physics» опубликовал карты различных наук: биологии, физики, математики, химии и computer science.
Нужно это затем, чтобы любой человек мог иметь представление о том, из чего состоят современные разделы науки.

Карты наук Наука, Научпоп, Физика, Математика, Химия, Биология, Computer Science, Информатика, Видео, Длиннопост

Выше был их автор. А вот и одна из его карт (по физике):

Карты наук Наука, Научпоп, Физика, Математика, Химия, Биология, Computer Science, Информатика, Видео, Длиннопост

О карте, нарисованной выше, Dominic подробно рассказал в следующем видео. Он рассказал о ранней физике, об Эйнштейне и его теориях специальной и общей относительности, и о подвидах квантовой физики.

Кстати говоря, помимо карт наук, на его странице во flickr есть интересные постеры о том, как мы уже сейчас используем квантовые технологии.

Все его видео по картам наук публикуются в следующем плейлисте: https://www.youtube.com/playlist?list=PLOYRlicwLG3St5aEm02nc.
Они на английском, но уже есть и переводы.

Вот, например, по Computer Science:

А вот по математике:

Спасибо за внимание!

За день до экзамена⁠ ⁠

Завтра, первого июня, одиннадцатые классы сдают профильную математику. Что это значит для меня? Что сегодня контроль технической подготовки и сдача школы представителю из министерства образования. На технической подготовке мы устанавливали 14 основных станций печати (ПК + принтер) и 5 резервных, на контроле члены государственной экзаменационной комиссии (ГЭК) должны проверить качество печати, и если их всё устраивает — поставить свою цифровую и обычную подписи.

На самом деле, сегодняшний день для меня начался еще вчера — в восемь часов вечера вызвали в школу. Оказывается, мы не отправили кое-какие документы в региональный центр обработки информации (РЦОИ). На тренировках и апробациях никогда не отправляли, а на реальных экзаменах оказалось нужно. Это информация мимо меня как-то пролетела, ну что поделать — сам виноват, сам и ходи на работу в восемь вечера. Пришел, отправил эти бумажки, оказалось неправильно настроены резервные станции печати, пришлось перенастраивать, заново отправлять отчёт — домой пошёл в 10. Пришёл, покалякал прописи (учусь писать левой рукой), поиграл, отправил ученикам мотивирующий мем, лёг спать — завтра рано вставать.

За день до экзамена Экзамен, ЕГЭ, Математика, Учитель, Школа, Информатика, ГИА, Работа, Длиннопост

Встаю в семь — и не могу вспомнить зачем. В школу технические специалисты и члены ГЭК приходят к десяти, мне до школы идти пять минут. Зачем я встал так рано? Ладно, думаю, время есть свободное, дай ленту пока полистаю. В половину девятого звонит завуч и спрашивает, почему я еще не в школе. Точно! Сегодня же едем устанавливать видеонаблюдение домашникам! Одеваюсь в удобное, бегу в школу.
Два домашника, на каждого по нетбуку и моноблоку с веб-камерами. Нетбуки легкие, компактные, с хорошими микрофонами и вебками — но без DVD-приводов. А видеозаписи экзамена на дому нужно отправлять на цифровом носителе (диск или флешка) в РЦОИ. Два домашника, три экзамена — итого шесть носителей. Если отправлять флешки — потом их не дождешься назад, поэтому решили видео писать на диски. А для этого нужны моноблоки. Короче, морока, которой можно было избежать, но не вышло.

Время к девяти, погрузили технику в машину завучу, едем. Первый домашник — головная боль всей школы. Точнее не он сам, а его мамаша. Очень приятная в общении женщина, пока ей от тебя ничего не нужно. Как только ей кажется, что её права нарушают — истерика, скандал, жалобы директору, роно, иногда в прокуратуру и минобр. Ставим видеонаблюдение, два ПК в разных углах комнаты для полноты обзора. Начала ругаться на то, что в камеру видно дверь в комнату (по регламенту её должно быть видно), а на двери стекло, и в отражении стекла будет видна остальная квартира, если приблизить видео. Благо, удалось быстро успокоить качеством видеозаписи. Ладно, всё поставили, перед нашим уходом она начала заводиться и что-то кричала, пока мы уезжали на лифте.
Приезжаем ко второй домашнице. Её мама — полная противоположность предыдущей. Абсолютно доброжелательная, улыбчивая, радостная женщина. Там мы управились минут за пять и поехали обратно в школу. Приходим, идём мимо кабинета директора — там мамаша первого домашника. Пишет директору жалобу на: 1) моноблок слишком сильно шумит, будет мешать её малышу сыну писать экзамен и 2) завуч не ответила на смс о том, что моноблок сильно шумит. Ладно, пообещали заменить моноблок. Решили взять ноутбук с дисководом — но почти все отдали на ОГЭ по информатике в другую школу. В коридоре поймали какую-то учительницу, попросили её отдать ноут, быстренько поставили программу для видеозаписи, поехали опять к домашнику, поменяли технику и обратно. Время уже к двенадцати.

Возвращаюсь в школу, понимаю что дико хочу кушать — иду в нашу замечательную столовую. Суп с мясом, макароны с котлетой, салат, компот, пирожное — за 100 с небольшим рублей. Время половина первого, иду в штаб к своим техническим специалистам. Небольшое лирическое отступление — я интроверт и исполнитель, но в школе вынужденный экстраверт и лидер. Так как экзамен проходит в моей школе, я являюсь фактически руководителем остальных техспециалистов, за это расплачиваюсь тем, что являюсь ответственным лицом. К огромному счастью, в моём подчинении пять грамотных, толковых человек, которые допускают минимум косяков и очень ответственно подходят к своему делу. Правда, сегодня двоих забрали на ОГЭ по информатике, что не помешало остальным трём вместе с членами ГЭК завершить контроль технической подготовки и отправить все документы в РЦОИ к моему приходу. Огромное спасибо ответственным людям! На вас всё держится во всех сферах жизни.
Хорошо, со станциями печати и сканирования разобрались, идём дальше. Проверяем видеонаблюдение. Оно идёт, во-первых, онлайн на сайте smotriege.ru — во время экзамена можно выбрать любой ППЭ и смотреть, что там происходит; во-вторых, через cctv-решение все аудитории показываются на отдельном ПК в штабе. Внезапно выясняется, что ноутбук, на который сводится всё видеонаблюдение, практически нежизнеспособен. Переписываем IP-адрес, перекидываем программу на новый комп (взятый откуда? из кабинета информатики), проверяем — всё работает, отлично. Далее в очередной раз проверяем все кабинеты — просматриваются ли все парты, видны ли часы, номер аудитории и т.д. Кстати говоря, во всём нам помогает директор школы — ходит с нами, обеспечивает всем необходимым, помогает найти потерявшиеся ключи и так далее.

Время к трём. Техническая работа завершена, специалисты разъехались по домам. Руководитель ППЭ (завуч) и директор уезжают на совещание в роно, а уполномоченный представитель ГЭК — человек, который принимает и опечатывает школу — должна приехать к пяти. И ведь неизвестно, кто приедет — может какая мегера, может просто принципиальный человек, а может и повезти. Остаюсь в штабе один, пока есть свободное время — переписываюсь с девятиклассниками, кто как написал информатику. ВК школьным провайдером блокируется, приходится сидеть через Tor. Ответы, говорят, были, но и задания были не сложные. Вторую часть решало по 2-3 человека из аудитории на 15 человек. Пора бы информатику в девятом тоже разделить на базу и профиль — было бы проще и организаторам, и детям. На самом деле, информатику как предмет в школе надо полностью менять, но это уже совершенно другая история.

Доходит половина пятого, ко мне забегает завуч, вернувшаяся из роно, и говорит, чтоб я бежал в завуческую. Преисполненный самых мрачных мыслей иду туда, отворяю и дверь и вижу. тортик, пирожное, фрукты и чай. Огромное спасибо таким руководителям, кто не забывает о том, что их подчиненные тоже люди ��
К пяти приезжает уполномоченный представитель ГЭК. Как оказалось, весьма приятная женщина, знающая свои обязанности, но не злоупотребляющая своими правами. Вчетвером (она, директор, руководитель ППЭ и я) ходим по всем кабинетам, еще раз проверяем видеонаблюдение, если всех всё устраивает — опечатываем кабинет. Так потихоньку к шести доходим до штаба, опечатываем его, затем уходим из школы и её опечатываем — рабочий день завершен. Желаем друг другу всего наилучшего, встречаемся завтра в семь утра таким же составом.

По пути домой встретил двух девятиклассниц, поболтали с ними — экзамен прошёл хорошо, суицидальных мыслей нет, это главное. А дома меня ждёт Туся:

За день до экзамена Экзамен, ЕГЭ, Математика, Учитель, Школа, Информатика, ГИА, Работа, Длиннопост

Ну, может и не сильно-то ждёт. Ну да ладно, всё равно любит. Наверное.

А завтра экзамен — а завтра вечером напишу, как всё прошло. Всем спасибо!

Перевод из десятичной системы счисления в двоичную

Перед тем как перейти к алгоритму перевода, вспомним алфавит двоичной и десятичной системы счисления:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *