Я всегда был очень заинтригован, видя на экранах компьютеров пачку нулей и единиц, поэтому подумал, почему бы не поработать над этим. Десятичная система счисления с основанием 10 или динарий уже укоренилась в моем мозгу, так что изучение основы 2 (10 в двоичной системе) должно быть легким делом, верно?… Надеюсь, что да.

Двоичная система счисления преобразует числа путем многократного деления десятичной дроби на 2 и отслеживает остаток. Итак, если бы мы хотели преобразовать десятичное число 7 в двоичное, вы бы сделали 7/2, чтобы получить остаток, затем 3/2, чтобы получить остаток, и, наконец, 1/2, и получить напоминание, и разместите их в обратном порядке.

Во-первых, бит, который является сокращением от двоичной цифры, представлен 0 и или 1. Один байт состоит из 8 бит и является наименьшей адресуемой единицей памяти для вычислений. Бит также известен как одиночный транзистор. Транзистор - это минутный переключатель, который показывает 0, когда он выключен, и 1, когда он получает питание и включается. В наших телефонах и компьютерах есть буквально миллионы и миллиарды этих транзисторов. Я знаю, что вы думаете ... ЭТО КУЧКА ЧЕРНЫХ ТРАНЗИСТОРОВ! Что ж, со всей графикой, которая у нас есть, и с тем, что эти машины должны запускать, нам это нужно. Наши компьютеры теперь могут обрабатывать миллионы бит в секунду. Эти 0 и 1 представляют собой числа, буквы, цвета и т. Д., Которые нужны компьютеру, чтобы мы могли указывать ему, что делать. Примечание: жесткие диски отображают двоичные цифры на дисках, а не на транзисторах.

Наши компьютеры кодируют и хранят все в двоичных цифрах, от букв (например, ASCII), наших аудиофайлов (например, MP3), видеофайлов (например, MPEG4) до изображений (например, JPEG) с битовой глубиной. Обновление с байтовой на 16-битную строку даст значительно больше возможностей.

Полубайт - это половина байта или 4 бита (довольно забавно, правда?). 8 бит = 1 байт, 1024 байта = 1 килобайт (КБ), 1024 килобайта = 1 мегабайт (МБ), 1024 мегабайта = 1 гигабайт (ГБ), 1024 гигабайта = 1 терабайт (ТБ), 1024 терабайта = 1 петабайт (ПБ) . Если вы думаете о iphone 64 ГБ, это число в байтах на самом деле 68719476736.

Жесткий диск обычно измеряется в ГБ или ТБ. ОЗУ обычно указывается в МБ или ГБ.

Во многих ситуациях вам может потребоваться изменить определенные биты в байте, и для этого вам нужно будет использовать побитовые операции. Существует 6 (110 в двоичном формате) основных побитовых операторов: побитовое И, побитовое ИЛИ, побитовое исключающее ИЛИ, побитовое дополнение или НЕ, побитовый сдвиг вправо и побитовый сдвиг влево. Битовая маскировка используется для включения или выключения отдельных битов. Это применимо только к целочисленным значениям.

Побитовое И & требует двух операндов. Биты сравниваются друг с другом, и когда оба бита равны 1, результат равен 1, в противном случае результат равен 0.

00001010 = 10 &

00000111 = 7

______________

00000010 = 2

Побитовое ИЛИ | нужно два операнда. Биты сравниваются друг с другом, и когда любой из битов равен 1, результат равен 1.

00001010 = 10 |

00000111 = 7

______________

00001111 = 15

Для побитового XOR ^ требуется два операнда. Биты сравниваются друг с другом, и если один из битов равен 0, а другой равен 1, результат равен 1, иначе результат равен 0. Он возвращает 1, когда два бита различны.

00001010 = 10 ^

00000111 = 7

______________

00001101 = 13

Побитовое НЕ ~ переворачивает биты операнда. Это приводит к отрицательному значению числа с -1, для наиболее значимого бита, чтобы показать знак числа, где 1 отрицательно, а 0 положительно.

~00001010 = 11110101

Побитовый сдвиг вправо ›› требует двух операндов. В первом операнде биты сдвинуты вправо на количество позиций, указанных во втором операнде. 0 сдвигаются в биты более высокого порядка, а биты младшего разряда полностью сдвигаются. Сдвиг вправо похож на деление на 2.

(5)00000101>>2 = 00000001(1)

Побитовый сдвиг влево ‹

(5)00000101<<2 = 00010100(20)

Картинка выше помогла мне лучше понять, что происходит.

Теперь давайте посмотрим, как мы можем использовать Ruby для выполнения этих операций.

Выше того, что происходит, если вы наберете '0b', тогда они получат восьмизначный байт в базу (2) и поместят его в строку (to_s), он преобразует его в десятичное для вас или выполнит побитовую операцию, о которой вы говорите Это. Вы также можете применить его к десятичным числам, таким как операция not выше для 17, и посмотреть, что она вернет, хотя отрицательный двоичный код - это еще одна отдельная мелочь, в которую мы действительно не войдем.

Выше мы установили десятичное число 58 в строку, чтобы увидеть, что она двоичная. Затем мы спрашиваем, какое десятичное число у предоставленного двоичного файла. Затем я спрашиваю, какой бит соответствует определенной позиции в этом байте. Затем, если вы спросите длину в битах для любого десятичного числа, она вернет его длину в битах. Максимальное число для байта - 255, поэтому после этого мы получаем 9, когда запрашиваем длину в битах 257.

На изображении выше .ord возвращает целочисленный порядковый номер для определенного символа. Добро пожаловать в ASCII. Затем вы сможете узнать, какой символ связан с этим номером, введя .chr. Когда вы предоставляете строку, а затем устанавливаете ее в .bytes, вы получаете байты для каждой отдельной буквы. Это почти то же самое, что и .codepoints. Однако выше они совпадают, но, допустим, у вас другой язык, например арабский, .codepoints не будут одинаковыми. Наконец .chars просто разбивает строку каждого отдельного символа на массив.

Не запутайтесь в методе лопаты в Ruby с побитовым сдвигом lol.

И последнее - отрицательные числа в двоичной системе счисления. Мне это кажется немного странным, но отрицательные числа можно представить несколькими способами. Вы можете использовать внешнее число слева, чтобы сделать его отрицательным, сделав его равным 1 или положительным на 0. || вы можете использовать так называемое дополнение до двух.

Мне понравилось узнавать о битах и ​​байтах и ​​о том, как они соотносятся с компьютерными компонентами. Прежде чем я углубился в двоичные числа, я прочитал несколько месяцев назад книгу под названием Bitwise, жизнь в коде Дэвида Ауэрбаха, которая, я думаю, была моим первым знакомством с битами. Несмотря на то, что книга - это скорее мемуары о его жизни инженера-программиста и его браке с инженером-программистом, чем о кучке отрывков, читать ее было очень приятно.

Есть еще нули и единицы, но на этом я собираюсь закончить. Надеюсь, вам понравилось & | чему-нибудь научился из этого.

Очень полезные ресурсы и видео:

  1. Приложение Sololearn