"Физика по-домашнему": На этот раз день рождения - папин. И при чём тут двоичная система счисления.

Jul 07, 2016 00:14



Папа у нас по профессии - программист. Казалось бы этим всё сказано. Идея двоичности постоянно витает в воздухе. Хотя, откровенно говоря, представить, что даже если в компьютере вся логика устроена таким образом, что сигнал либо есть, либо его нет (1-0), непонятно, зачем понимание этого надо держать в голове, если ты пользуешься современными языками программирования.

В прошлом году у нашего папы был день рождения, что, конечно, дело обычное.Яна испекла пирог, и поэтому о свечах подумать было некому. И тридцать четыре свечи в доме в стратегический момент не оказалось. Тогда папа-программист сказал, что ему вполне подойдёт то же число, представленное в двоичной системе счисления (свеча горит или не горит). Сказано - сделано.  Яна говорит, что она "сама". Сама, так сама. Папа ей быстренько объясняет, сколько должно быть свечек и какие из них должны гореть, чтобы всё получилось (вообще с каждым годом всё больше важных процессов ускользают от моего внимания, но я ничего, я - радуюсь).

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

- Сейчас я в двоичной зажгу! - кричит Яна. На минуту (ну может быть две), склоняет голову и принимается что-то перебирать на пальцах, потом подпрыгивает и несётся на кухню.

Я сижу и мучительно пытаюсь понять, сколько же и чего надо. Это история не о том, что дочь уже умнее меня, а о том (в очередной раз), почему линейные уравнения в первом классе я считаю скорее вредными, чем полезными. А моей голове всплывает урок информатики, седьмой класс. Нам как раз объясняли, что логика компьютера пользуется двоичным сигналом (есть сигнал - нет), и поэтому всё в компьютере зашито в двоичную логику (на бумаге, или в строчке это выглядит, как 1-0). Дальше нам показали, как из десятичной системы переводить в двоичную и наоборот. Мы делали это на листочке. На этом наше обучение закончилось, понимание можно было использовать для игры в то, кто умнее. Мне помнится, что надо было делить на два, пока делится, а потом выписать всё в обратном порядке. Такая схема. Внутренняя логика тогда от меня оказалась скрыта, а теперь на понимание у меня ровно одна минута, потому что если уж я не успела посчитать первая, то мне надо хотя бы проверить верность результата. Впрочем, дочь уже  вернулась, расставила шесть свечей и помчалась назад за спичками.

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

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

- Мощности не те, - парирует друг.

- Да, она и четырёхзначные в уме складывает. Она и двоичную в уме переводит.

- Я на пальцах! - несётся по квартире.

- Видал, она на пальцах. Не хочет, чтобы я её перехваливала. Всего лишь "на пальцах".

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

- Мама, наоборот! - расстроено причитает дочь.

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

P.S. Вероятно, Вы заметили, что способ, которым учили переводить в двоичную систему меня не так уж плох сам по себе. Проблема в том, что его надо было освоить по программе, и это заодно тот редкий случай, когда его, в сущности, так и не получилось притянуть за уши ни для чего в жизни, поэтому он остался мёртвым.
Он и сейчас, вероятно, да и наверняка не очень-то нужен. Но всё же привожу мастер-класс по переводу между системами счисления от своего мужа - вдруг кому пригодиться.

Приложение 1. Мастер - класс по переводу между системами счисления от Александра Q.

Переводить из десятичной в двоичную проще, если сперва научиться переводить из двоичной в десятичную.

Берём число, например, 100010. Порядок разрядов пусть будет привычный - младшие разряды справа, старшие слева (то есть, как 90 у нас больше, чем 09, так и 10 в двоичной системе больше, чем 01).

У нас 6 цифр. Переводим в десятичную так: нумеруем разряды справа налево, начиная с 0. Таким образом, в разрядах номер 5 и номер 1 у нас стоит единица, а во всех остальных (4,3,2,0) - ноль.

Для каждого из разрядов, где стоит единица, мы возводим число 2 (основание нашей, двоичной, системы счисления) в номер разряда, и складываем то что получилось. То есть, 2^1 + 2^5 (знаком ^ мы тут обозначаем возведение в степень).

2^1 + 2^5 = 2 + 32 = 34.

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

100010 (в двоичной) = 0*2^0 + 1*2^1 + 0*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 2 + 32 = 34. В таком виде это работает для любой системы счисления.

А теперь, обладая этим знанием, можно переводить числа из десятичной системы в двоичную. Для этого было бы полезно запомнить степени двойки сколько получится. Я запомнил две: 2^5 = 32, 2^10 = 1024. Остальное легко получить несколько раз домножив или поделить ближайшую известную степень на 2.

Мы берём нужное число (пусть это будет 35) и вычитаем из него самую большую степень двойки, которая меньше этого числа. В данном случае это 32 = 2^5. Запоминаем этот факт, остаётся 3. Повторяем этот фокус до тех пор, пока не останется 0: вычитаем первую степень 2=2^1, остаётся 1; вычитаем нулевую степень 1=2^0, остаётся 0.

Подводим итог: мы вычитали степени номер 0, 1 и 5. Пишем справа налево результат, записывая 1 в разряды тех степеней, которые мы вычли, и 0 во все остальные:

100011.

Итак, перевод из десятичной системы в двоичную сводится к вычитанию степеней двойки. А обратно - к сложению.

Что касается порядка разрядов: существуют различные способы представления чисел в памяти компьютеров, в том числе и в порядке “от меньшего к большему”. В таком порядке число “сто двадцать три” было бы записано как “321”. Так что торт, вообще говоря, вращать было необязательно, но я не успел об этом рассказать.

Нужно ли это знать? Нет. Иногда может оказаться полезно или интересно, и тогда это запомнится само.

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

Например, существует известная ошибка, когда добавив к большому числу другое мы получим отрицательное число. Это связано с тем, что для целых чисел последний (старший) разряд используется для хранения знака числа. Если у нас используется три разряда для числа и 1 для знака, то добавив к числу 0111 (7) число 0011 (3), мы получим 1010 (10, но если старший разряд используется для хранения знака - то -2).

Например, в какое-то место (база данных) мы почему-то не можем записать число больше 65535. Зная, что это число представляет собой 1111 1111 1111 1111 можно сделать вывод, что туда можно сохранить только 16-битовое число, причём только положительное (мы видим, что старший разряд не используется для хранения знака). Это знание поможет нам найти способ решить или обойти проблему.

А ещё внимательно смотрите на характеристики  жёстких дисков при покупке, 1000ГиБ (гибибайт) - это гораздо больше, чем 1000ГБ (гигабайт).

homeschooling, физика, математика, 6-10

Previous post Next post
Up