Как биты и байты работают в памяти компьютера

11

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

Вы можете услышать рекламное утверждение о том, что машина оснащена 32-битным процессором Pentium, имеет 64 мегабайта оперативной памяти и 2,1 гигабайта пространства на жестком диске. Эти спецификации постоянно встречаются в технических руководствах и обучающих материалах. Понимание того, что на самом деле означают эти термины, помогает перестать гадать и начать точно знать.

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

Чтобы понять, что такое бит, сравните его с чем-то знакомым: цифрами.

Цифра — это отдельная позиция для значения от 0 до 9. Мы объединяем их, чтобы получить большие числа. Возьмем число 6357. Оно состоит из четырех цифр. Семерка находится в разряде «единиц». Пятёрка — в разряде «десятков». Тройка — в разряде «сотен». Шестерка занимает разряд «тысяч».

Это можно записать явно:

(6 * 1000) + (3 * 100) + (5 * 10) + (7 * 1) = 6000 + 300 + 50 + 7 = 6357

Или использовать степени числа 10. Используя символ каретки (^) для обозначения «в степени», это выглядит так:

(6 * 10^3) + (3 * 10^2) + (5 * 10^1) + (10^0) = 6000 + 300 + 50 + 7 = 6357

Каждая цифра является разрядом для следующей более высокой степени числа 10. Первая цифра начинается со 10^0.

Это кажется нормальным, потому что мы ежедневно используем десятичную систему счисления. Вероятно, она существует потому, что у людей десять пальцев. Если бы мы эволюционировали с восемью пальцами, мы, вероятно, использовали бы восьмеричную систему. Можно использовать любую систему счисления. Разные основания имеют смысл в разных контекстах.

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

Двоичная система и 8-битный байт

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

Таким образом, компьютеры используют двоичные числа. Они используют двоичные цифры вместо десятичных. Слово бит (bit) является сокращением от «Binary digIT» (двоичная цифра).

Десятичные цифры имеют 10 значений: от 0 до 9. Биты имеют только два значения: 0 и 1. Двоичное число — это просто строка из нулей и единиц, например, 1011.

Чтобы найти значение, используйте степени числа 2 вместо степеней числа 10.

(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 8 + 0 + 2 + 1 = 11

Каждый бит представляет возрастающие степени числа 2. Счет в двоичной системе прост. Вот как десятичные и двоичные числа сравниваются от 0 до 20:

  • 0 = 0
  • 1 = 1
  • 2 = 10
  • 3 = 11
  • 4 = 100
  • 5 = 101
  • 6 = 110
  • 7 = 111
  • 8 = 1000
  • 9 = 1001
  • 10 = 1010
  • 11 = 1011
  • 12 = 1100
  • 13 = 1101
  • 14 = 1110
  • 15 = 1111
  • 16 = 10000
  • 17 = 10001
  • 18 = 10010
  • 19 = 10011
  • 20 = 10100

Обратите внимание на перенос разряда. В числе 2 двоичная система впервые использует перенос. Если бит равен 1 и вы добавляете 1, он становится 0, а следующий бит становится 1. Переход от 15 к 16 вызывает переполнение через четыре бита, превращая 1111 в 10000.

Биты редко путешествуют в одиночку. Они группируются в наборы по 8 бит. Эти группы называются байтами.

Почему в байте восемь битов? Это все равно что спросить, почему в дюжине 12 яиц. Люди пришли к 8 битам методом проб и ошибок за последние 50 лет.

С помощью 8 битов можно представить 256 значений. Они варьируются от 0 до 255.

  • 0 = 00000000
  • 1 = 00000001
  • 2 = 00000010
  • 254 = 11111110
  • 255 = 11111111

В статье Как работают CD-диски вы узнаете, что CD использует 2 байта на сэмпл. Это 16 битов. Каждый сэмпл может варьироваться от 0 до 65

Как кодировка ASCII и двоичная математика обеспечивают хранение ваших данных

Текст — это не магия. Это просто числа в маске.

Когда вы набираете предложение, компьютер не видит буквы. Он видит двоичные значения. В частности, он опирается на стандартный набор символов ASCII, чтобы превратить нажатия клавиш в данные. В этой системе каждое двоичное значение от 0 до 127 сопоставляется с конкретным символом. Большинство систем расширяют этот набор до 256 значений, используя полный байт, добавляя буквы с диакритическими знаками и символы для международных языков.

Но фундамент закладывается в первых 128 кодах.

Возьмите текстовый редактор Notepad в Windows 95/98. Если вы наберете «Four score and seven years ago», программа выделит ровно один байт памяти на каждый символ. Это включает пробелы между словами. Пробел — это код ASCII 32. Точка — 46. Буква ‘A’ — 65.

Попробуйте сами.

Создайте файл с именем getty.txt. Наберите это предложение. Сохраните его. Откройте проводник файлов. Размер файла составляет 30 байт. Почему? Потому что в нем 30 символов. Добавьте одно слово. Размер файла увеличится на количество букв в этом слове. Это прямое соотношение 1:1.

Откройте файл как сырые данные, и буквы исчезнут. Вы увидите числа.

Это десятичные представления кодов ASCII. Для технической точности: машина видит только двоичный код. 32 становится 00100000. Но логика сохраняется: каждый байт содержит один символ.

Первые 32 значения (от 0 до 31) — это не буквы. Это управляющие коды. Возврат каретки. Перевод строки. Звуки сигнала. Печатаемые символы начинаются с 32. За ними следуют знаки препинания. Затем цифры. Затем заглавные буквы. Затем строчные. Полную таблицу можно посмотреть на сайте Unicode.org, но принцип прост: хранение текста — это просто список этих целых чисел.

Понимание приставок байтов и двоичной математики

Как только вы поймете, что данные — это просто байты, вы столкнетесь с новой проблемой: масштабом.

Байт — это мало. Большинство файлов огромны. Поэтому нам нужны приставки.

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

  • Кило (K): $2^{10}$ = 1 024 байта
  • Мега (M): $2^{20}$ = 1 048 576 байт
  • Гига (G): $2^{30}$ = 1 073 741 824 байта
  • Тера (T): $2^{40}$ = ~1,1 триллиона байт
  • Пета (P): $2^{50}$ = ~1,1 квадриллиона байт
  • Экса (E): $2^{60}$ = ~1,1 квинтиллиона байт
  • Зетта (Z): $2^{70}$
  • Йотта (Y): $2^{80}$

Кило — это примерно тысяча. Мега — миллион. Гига — миллиард.

Когда кто-то утверждает, что его жесткий диск имеет объем «2 гигабайта», он имеет в виду $2 \times 2^{30}$ байт. Ровно 2 147 483 648 байт.

Это звучит абстрактно, пока вы не представите эти данные визуально. Стандартный CD-диск вмещает около 650 мегабайт. Три диска заполняют 2-гигабайтный диск. Базы данных на терабайты распространены. Базы данных на петабайты, вероятно, существуют в крупных правительственных учреждениях. Масштаб растет экспоненциально.

Это приводит нас к двоичной математике.

Она работает так же, как десятичная, с одним строгим ограничением: каждый бит может быть только 0 или 1.

В десятичной системе мы считаем от 0 до 9. Когда мы достигаем 9 и добавляем 1, мы переносим 1 в следующий разряд. В двоичной системе все работает аналогично, но перенос происходит быстрее.

Возьмем десятичное сложение:

Начинаем справа. $2+1=3$. Следующий разряд: $5+5=10$. Записываем 0, переносим 1. Следующий: $4+7+1(перенос)=12$. Записываем 2, переносим 1. Итог: $0+0+1=1$. Результат: 1203.

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

Правый бит: $0+1=1$. Переноса нет.
Второй бит: $1+1=10$. Записываем 0, переносим 1.
Третий бит: $0+1+1(перенос)=10$. Записываем 0, переносим 1.
Четвертый бит: $0+0+1(перенос)=1$.

Результат 1001. В десятичной системе это 9. Математика идентична. Просто представление основано на системе счисления с основанием 2 вместо 10.

Итог

Биты — это двоичные цифры. Они равны 0 или 1.
Байты — это группы из 8 бит.
Текст — это просто последовательность байтов, сопоставленных с кодами ASCII.
Размер хранилища измеряется в степенях двоичного числа 1 024.

Это не сложно. Это просто фундамент.

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