Понимание битов

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

Поговорим о цифрах

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

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

Возьмите следующее: 100.

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

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

  • 100 - это десятичное представление
  • сто - это буквальное английское обозначение.
  • цент - это французское представление
  • C представляет собой римское число.
  • 64₁₆ - шестнадцатеричное представление (основание 16).
  • 1100100₂ - двоичное представление (основание 2)

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

Краткое резюме: как работает десятичная система счисления

Я знаю, что это может показаться тривиальным, но это не повредит.

Возьмем такое число: 41 589,77₁₀. Маленькая после числа обозначает базовую систему. 10 соответствует основанию 10 (десятичному), 8 соответствует основанию 8 (восьмеричному) и т. Д.
Десятичная система говорит нам, что каждая цифра является степенью 10 («десятичная» часть десятичной дроби означает «10»).

Итак, 41589,77 можно переписать так:

4*10⁴ + 1*10³ + 5*10² + 8*10¹ + 9*10⁰ + 7 * 10⁻¹ + 7 * 10⁻²

Что в упрощенном виде дает нам:

40 000 + 1000 + 500 + 80 + 9 + 0,7 + 0,07

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

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

Вспомните, что в наших десятичных системах мы можем использовать числа от 0 до 9 (что составляет 10 разных цифр)? В двоичной системе мы можем использовать только 0 и 1.

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

1* 2⁶ + 1*2⁵ + 0*2⁴ + 0*2³ + 1*2² + 0*2¹ + 0*2⁰

Что в десятичной форме равно:

64 + 32 +4

Вы справитесь, это даст вам 100.

Здесь мы только что преобразовали 7-значное число с основанием 2 (двоичное) в 3-значное число с основанием 10 (десятичное). Как здорово ! Но теперь я думаю, что вас беспокоит вопрос: почему компьютеры используют двоичную систему?

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

Вы, наверное, знаете, что компьютер не может работать без электричества? Итак, чем электричество полезно для компьютера?

Первая и самая логичная причина: включить все. Хорошо, но это еще не все.

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

Аналогия с кодом Морзе

Чтобы лучше понять это, давайте проведем аналогию. Вы знаете азбуку Морзе? Это просто: кто-то использует фонарик, включает его на несколько секунд, затем включает, ждет 1 секунду и повторяет, пока сообщение не будет передано. Предлагаю заняться чем-нибудь забавным: давай изобрели свой Морс!

Итак, у меня есть фонарик. Он может иметь два разных состояния: включен и выключен (не может быть одновременно!).

Давайте расшифруем это:

  • Одноразовое включение и выключение света на короткое время означает A
  • Мигание (включение и выключение) в течение длительного времени (в два раза превышающего короткий период) означает B
  • Короткое мигание 3 раза означает C
  • Мигание один раз в течение короткого периода и один раз в течение длительного периода означает D

Звуки идут, не так ли? Давайте попробуем один код.

Что ж, по сравнению с нашим кодом Морзе ... Кажется, этот код может иметь два значения:

  • ABA: один короткий - один длинный - один короткий
  • DA: один короткий, один длинный - один короткий

Дерьмо. В нашем коде Морзе всего 4 буквы, и он уже разваливается. Как мы можем это решить?

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

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

Итак, похоже, что уйдет последний. Итак, давайте добавим еще правил к нашей азбуке Морзе:

  • Кратковременное мерцание: загорается на 1 секунду, гаснет на 1 секунду.
  • Длительное мерцание: светится 2 секунды, гаснет 1 секунду.
  • Каждые буквы должны быть разделены задержкой в ​​2 секунды.

Попробуем еще раз.

Яснее:

  • Сначала мы включаем свет на 1 секунду (короткое мерцание) и выключаем на 2 секунды. Так что это А.
  • Затем у нас есть свет на 2 секунды (долгое мерцание) и выключение на 2 секунды. У нас есть Б.
  • Затем у нас есть свет на 1 секунду. Это другой A. Мы считаем, что это конец сигнала: после этого у нас больше не будет мерцаний (или мы просто решили, что этого достаточно, и не заботимся об остальном).

Теперь давайте рассмотрим следующее сообщение.

  • Сначала мы включаем свет на 1 секунду, выключаем на 1 секунду, на 2 секунды и 2 секунды: это D.
  • Затем у нас горит 1 секунда: это буква А.

Отлично, мы создали наш собственный код Морзе, используя 4 буквы, несколько правил и немного огней. Действительно здорово.

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

Вернуться к электричеству

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

В нашей азбуке Морзе есть следующие объекты:

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

В вычислениях мы находим те же самые сущности:

  • Сигнал: это просто электричество. Его также можно «включать и выключать».
  • Интерпретация: мы узнаем об этом позже.
  • Среда распространения: это провод, по которому течет электричество.

Чтобы азбука Морзе работала, нам необходимо иметь два различных сигнала: сигнал «включено» и сигнал «выключено», что делает систему Морзе двоичной.

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

Возьмем провод, по которому течет напряжение 5В:

  • Если напряжение выше 2,5 В, считается, сигнал включен
  • Если напряжение ниже 2,5 В, считается, что сигнал отключен.

С этого момента он в точности похож на азбуку Морзе: вы отправляете сигнал «включено» в течение некоторого периода времени (в действительности, в наносекундах в случае электричества), за которым следует сигнал «выключено» или определенное количество времени, чтобы сказать «Хорошо. , я дал вам первый код, это A, теперь я дам вам следующий код ».

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

  • Когда сигнал включен, мы интерпретируем его как двоичное значение 1.
  • Когда сигнал выключен, мы интерпретируем его как двоичный 0.

Итак, представьте, что мы хотим отправить номер 11001011 на другой компьютер по одному проводу. Мы немного упростим ситуацию:

  • Сигнал, включенный или выключенный, должен длиться 1 секунду. Это означает, что если мы получаем сигнал «включено» в течение 3 секунд, на самом деле это 3 разных сигнала «включено».
  • Наш компьютер, получивший сигнал, ожидает числа из 8 цифр.

В этих схемах мы можем видеть электрическое представление отправки 11001011 в качестве сигнала. Напомним, что все это происходит в одном канале: мы получаем 1 и 0 последовательно, один за другим.

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

Проблема в том, что этот процесс довольно долгий: нам нужно подождать 8 секунд, чтобы получить 8 бит. Нет способа ускорить этот процесс?

Думаю, у вас уже есть ответ: параллелизм! Что, если вместо отправки всех 8 битов по 1 проводу, что если мы отправим 1 бит через 8 проводов? Именно это мы и сделали. Мы начали выстраивать 8 проводов, и всякий раз, когда мы хотим отправить сигнал, мы отправляем одно сообщение по 8 проводам.

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

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

К сожалению, мы имеем дело с очень маленькими сигналами, иначе наши маленькие компоненты сгорят. Таким образом, мы ограничены в количестве возможных значений, которые мы можем использовать, потому что между 0 и 5 В есть место для шума. Поэтому вместо этого мы установили порог и посчитали, что выше этого порога мы возьмем 1, а ниже - 0.

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

Вы только представляете, как с 0 и 1 вы можете смотреть фильм, играть в видеоигры, загружать файл, отвечать людям на facebook и запускать сервер Minecraft? Насколько это потрясающе?

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