Сегодня разберем основы компьютера, системы счисления, объемы памяти.
Поехали!
Как работает компьютер?
Компьютер, по сути, состоит из трех частей: устройства ввода/вывода, обработчик.
| Что | Тип | Зачем | Примеры |
|---|---|---|---|
| Устройства | Ввода | Мы совершаем физическое действие и оно сигнализирует компьютеру | Клавиатура, мышка, микрофон и так далее |
| Устройства | Вывода | Компьютер после обработки что то делает | Монитор, принтер, динамики и так далее |
| Внутренности компьютера | Обработчик | Самое интересное. Обработчик берет ввод, а сам отдает вывод. Получается сложенная работа | Процессор |
Единицы, нолики, опять единицы...
Процессор компьютера понимает только два значения: 1 и 0.
Факт: исторически сложилось, что процессор понимает только 1 и 0. Почему?
- Потому что ток, идущий по проводам либосильный, либо слабый. Взять значение по середине - опасно, так как можно перпцтать. Двоичный сигнал не спутать.
- Потому что ток, идущий по проводам либосильный, либо слабый. Взять значение по середине - опасно, так как можно перпцтать. Двоичный сигнал не спутать.
Итак, если сильно упрощать, то 1 - есть ток, 0 - нету: вы познакомились с двоичной системой счисления. Но согласитесь, что писать 100100111 не удобно? Для таких случаев люди придумали хитрый ход: использовать другие цифры и буквы. Получились системы счисления, вот популярные из них:
| Система | Основание | Используем | Пример числа 255 | Описание |
|---|---|---|---|---|
| Двоичная (бинарный код) | 2 | 0 или 1 | 11111111 | Родной язык процессора |
| Восьмеричная | 8 | от 0 до 7 включительно | 377 | Используется в linux системах для управления правами |
| Десятичная | 10 | от 0 до 9 включительно | 255 | Человеко-понятно |
| Шестнадцатиричная | 16 | от 0 до 9 И от A до F | FF | Кодировка цветов (Must have), физические адреса электронных устройств в машинах |
Почему я взял 255? Это хороший вопрос. Ответ не так прост, потому что это связано с объемами данных.
255 или 256?
Немного из школьной программы: как посчитать количество исходов? Есть монетка орёл/решка. Если бросить её один раз, то вариантов ровно 2: или орёл, или решка. Если бросить 2 раза, то 2^2 (два во второй степени) = 4 варианта. Количество вариантов любого события считается по формуле: {число вариантов} в степени {количество мест}.
Итак, память. Как мы поняли ранее, процессор понимает только 1 или 0. Условно, в памяти есть одна "коробка" для записи ровно одного значения: 1 или 0. Поэтому самая малая единица измерения в программировании - бит - она занимает ровно 1 "коробку" и может хранить или 1 или 0. Процессору глубоко наплевать на биты, байты, гигабайты, а человеку - нет. В следствии этого, человек придумал условные абстракции: байты, гигабайты, терабайты.
У нас число вариантов всегда 2 (потому что только 1 или 0), а число мест разное: например у байта 8 мест, потому что он забирает сразу 8 коробочек. Получается 2 в степени 8 = 256 вариантов двоичного кода (1/0) может быть у байта.
Вернемся пока к объемам.
Термометр бьёт 40 градусов цельсия внутри этого поста! Всё жарче и жарче
| Сокращенно | Название | Соотношение | В байтах | В битах |
|---|---|---|---|---|
| б | Бит | 1/8 байта | 0.125 Б | 1 |
| Б | Байт | 8 бит | 1 байт | 8 |
| КБ | Килобайт | 1024 Б | 1024 | 8192 |
| МБ | Мегабайт | 1024 КБ | 1048576 | 8388608 |
| ГБ | Гигабайт | 1024 МБ | ~ 1.07 млрд. | - |
| ТБ | Терабайт | 1024 ГБ | ~ 1.1 трлн. | - |
Почему же 255? Тут в силу вступают два интересных факта из эволюции электронно вычислительных машин (проще сказать компьютер).
Факт: исторически сложилось, что счёт идёт не с 1, как в обычной жизни, а с 0. Почему?
Представьте себе длинный стеллаж с пронумерованными ячейками. Мы договорились, что номер ячейки - это расстояние от самого начала стеллажа.
Чтобы положить вещь в первую ячейку, какое расстояние нужно пройти от начала? Ноль шагов. Значит, её номер - 0. Чтобы дойти до второй, нужен 1 шаг. Её номер - 1. До четвертой - 3 шага, номер 3.
Компьютерная память устроена похоже. Адрес каждого кусочка памяти - это просто его порядковый номер-смещение от самого первого байта. И первый "участок" находится на нулевом расстоянии от начала
Вторая причина - математическая. Как мы выяснили, 1 байт даёт нам 256 комбинаций. Если начинать их перебор с нуля (00000000), то последней комбинацией (11111111) будет 255. Мы просто используем весь доступный диапазон от 0 до 255, не теряя ни одной комбинации, которая ушла бы на бесполезную единицу в начале списка.
Представьте себе длинный стеллаж с пронумерованными ячейками. Мы договорились, что номер ячейки - это расстояние от самого начала стеллажа.
Чтобы положить вещь в первую ячейку, какое расстояние нужно пройти от начала? Ноль шагов. Значит, её номер - 0. Чтобы дойти до второй, нужен 1 шаг. Её номер - 1. До четвертой - 3 шага, номер 3.
Компьютерная память устроена похоже. Адрес каждого кусочка памяти - это просто его порядковый номер-смещение от самого первого байта. И первый "участок" находится на нулевом расстоянии от начала
Вторая причина - математическая. Как мы выяснили, 1 байт даёт нам 256 комбинаций. Если начинать их перебор с нуля (00000000), то последней комбинацией (11111111) будет 255. Мы просто используем весь доступный диапазон от 0 до 255, не теряя ни одной комбинации, которая ушла бы на бесполезную единицу в начале списка.
Факт: исторически сложилось, что считать в битах становится тяжело, да и единого стандарта не было. Поэтому решили, что надо взять за стандарт 1 байт. Удобно считать: 2^3 (два в третей степени) = 8 бит.
Что такое 1 байт? Это 8 бит. Что такое 8 бит? Это 8 "коробочек". Получается: 2^8 = 256. Считаем с нуля, значит - нам нужно сделать 255 шагов. Вот и вся магия.
Запомните 255 и 256
255 - потому что так говорят программисты, 256 - потому что так проще понять, что речь про 2^8.
А почему именно байт? Причин исторических очень много. Я просто скажу, что это невероятно удобно: можно записать алфавит, буквы, спецсимволы, цвета, удобно делить (получать полубайты, что вообще то является 1 символом HEX).
| Что | Конкретнее | Описание |
|---|---|---|
| Оперативная память (RAM) | Ячейка памяти | Минимальная адресуемая единица; каждая ячейка имеет уникальный адрес и вмещает ровно 1 байт (8 бит) |
| Жесткие диски и SSD | Секторы и файловые системы | Данные логически измеряются в байтах; размеры файлов и свободного места ОС показывает в байтах (и производных) |
| Кодировка текста (историческая) | ASCII | 1 символ = 1 байт (7 значащих бит, восьмой — для контроля четности или расширенного набора) |
| Кодировка текста (современная) | UTF-8 | Основной стандарт интернета; переменная длина (1–4 байта на символ), но базовый кирпичик — 1 байт |
| Языки программирования | C/C++: char, unsigned char | По стандарту sizeof(char) всегда равен 1 байту (8 бит); минимальная адресуемая единица |
| Языки программирования | Java: byte, Go/Rust: u8, Python: bytes/bytearray | Встроенные 8-битные целочисленные типы и бинарные последовательности для работы с данными |
| Сетевые протоколы | IPv4-адреса | Адрес состоит ровно из 4 октетов (байт), например 192.168.1.1 |
| Сетевые протоколы | Заголовки TCP/UDP/IP | Служебные поля пакетов выровнены по байтовым границам; данные упаковываются в байтовые структуры |
| Сетевые протоколы | MAC-адреса | Аппаратный адрес сетевой карты — это 6 байт (00:1A:2B:3C:4D:5E) |
| Изображения (растр) | RGB24 / RGBA | На каждый цветовой канал пикселя отводится 1 байт (256 градаций); итого 3 или 4 байта на пиксель |
| Звук (цифровой) | 16-битный звук (CD-качество) | Один звуковой сэмпл занимает 2 байта (16 бит) на канал |
| Скорость передачи данных | Программы и ОС | Скачивание файлов отображается в байтах/с (КБ/с, МБ/с), в отличие от провайдерских бит/с |
| Облачные сервисы и хостинг | Тарификация | Объём хранения и исходящий трафик измеряются и оплачиваются в гигабайтах (ГБ) |
Конец!
В этом уроке вы узнали про основные системы счисления, про стандарты индустрии и почему они важны по сегодняшний день.
К главной странице уроков