Добрый день, уважаемые читатели! Вот вы когда-нибудь задумывались, почему в стандартном калькуляторе Windows есть загадочный режим «Программист»?
Нет? Ну и зря! А я вот недавно создал аккаунт и решил написать свою первую статью именно об этом.
Поначалу хотел рассказать про что-то более романтичное, например, как выращивать огурцы на Марсе или как научить кота программировать, но карантин внёс свои коррективы — пришлось переключиться на более земные темы. Так что встречайте: «Проба пера», или как я пытался разобраться в таинственном мире двоичных чисел и битов.
Итак, представьте себе калькулятор не просто для подсчёта сдачи в магазине, а для настоящих программистов — тех самых людей, которые разговаривают с компьютерами на языке нулей и единиц.
Да-да, все данные в наших железных друзьях хранятся именно так: 0 и 1. Но что же они там считают? Какой секрет скрывается за этим режимом «Программист»?
Чтобы понять это, нужно немного окунуться в мир низкоуровневого программирования — звучит страшно, но на самом деле это просто способ поговорить с процессором так близко, что он начинает шутить с вами своими байтами.
Один из самых популярных языков в этой области — ассемблер. Если бы ассемблер был человеком, он бы точно был тем самым дядей на свадьбе, который рассказывает длинные истории о том, как раньше всё было проще и лучше.
На этом языке пишут драйверы и всякие штуки, которые заставляют ваше оборудование работать без сбоев (ну или почти без).
Но писать программы на ассемблере — это как собирать мебель из IKEA без инструкции: можно собрать стул, а можно получить современный арт-объект из досок и шурупов. Поэтому появились высокоуровневые языки вроде Pascal или JavaScript — они уже ближе к человеческому языку и позволяют писать программы быстрее и проще. Но даже для них иногда приходится заглядывать в режим «Программист» калькулятора.
Давайте немного поговорим о битах — этих маленьких существах размером с электронный атом информации.
Один бит может быть либо 0, либо 1 — своего рода выбор между кофе или чаем по утрам. Восьмерка таких битиков образует байт — минимальный блок памяти для хранения данных. С помощью одного байта можно сохранить число от 0 до 255 (кто-то сказал «много»?).
А если взять два байта (16 бит), то уже можно хранить числа до 65 535 — почти целая армия!
Вот тут начинается самое интересное: когда программисты хотят сохранить логическое значение (например, да или нет), им достаточно одного бита. Но операционная система почему-то выделяет целый байт памяти под эту задачу!
Представьте ситуацию: вы приходите на вечеринку один человек (один бит), а вам дают отдельную комнату с диваном и телевизором (целый байт). Почему? Потому что так удобнее процессору.
Многие скажут: «Да какая разница один байт потерять?» Раньше это действительно было важно — память была дороже золота (ну почти). Сейчас же мы живём во времена гигабайтов и терабайтов!
Хотя… если посчитать количество булевых переменных в крупной программе… эх! Это уже повод задуматься.
Кстати, вспоминается анекдот про программиста: приходит он к врачу и жалуется на плохое самочувствие. Врач спрашивает: «Вы курите?» Программист отвечает: «Нет». Врач удивлённо: «А почему тогда кашляете?» Программист отвечает: «Потому что я не курю!» Вот так же и с памятью — не используешь её эффективно, а она всё равно занята.