Первая ошибка, которая научила меня уважать битовую ширину, была флаг разрешения, который продолжал очищать себя. Я ИЛИ битовую маску в целочисленный столбец, и время от времени все поле сбрасывалось. Причина была смущающей, когда я увидел это: я рассуждал о битах так, как будто они жили в 32 слотах, но значение уже было расширено, и случайный НЕ где-то вверх по течению перевернул биты, которые я никогда не учитывал. Я исправил это, сев на калькулятор, который показал мне фактические биты на фактической ширине, а не аккуратную десятичную дробь, напечатанную на моем языке. Это руководство посвящено этой привычке, используя Бинарный калькулятор на Toolz.dev, и почему побитовая математика, где можно увидеть каждую базу одновременно, экономит часы угадывания.
TL;DR: Двоичный калькулятор выполняет арифметические (сложение, вычитание, умножение, деление) и побитовые операции (И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ, сдвиги) над целыми числами, записанными в двоичном, восьмеричном, десятичном или шестнадцатеричном формате, и показывает результат сразу по всем четырем базам. Арифметика точна при любом размере; побитовые операции зависят от выбранной разрядности.The Бинарный калькулятор выполняет и то, и другое, полностью в вашем браузере, и сообщает о подписанных и неподписанных показаниях для побитовых результатов.
Что такое бинарный калькулятор?
Двоичный калькулятор - это инструмент, который работает с целыми числами по основанию два, но полезные не ограничиваются основанием два вообще. вы выбираете базу, в которой вы думаете, двоичную, восьмеричную, десятичную или шестнадцатеричную, вводите ваши числа, выбираете операцию и читаете ответ. хорошие показывают этот ответ в каждой базе одновременно, поэтому вы никогда не запускаете отдельное преобразование для проверки здравомыслия того, что вы получили.
Причина, по которой это имеет значение, заключается в том, что низкоуровневая работа постоянно пересекает базы. цвет - это шестнадцатеричный, маска разрешений - двоичный в вашей голове, но десятичный в базе данных, значение сети - восьмеричный в одной конфигурации и десятичный в другой. выполнение математических вычислений в одном месте, со всеми видимыми представлениями, удаляет целый класс ошибок транскрипции. вы не копируете шестнадцатеричное значение в десятичный калькулятор и надеетесь, что сначала переведете его правильно.
На Toolz.dev поток короткий Выберите входную базу Введите первое значение Выберите операцию Введите второе значение Результат отображается в двоичном, восьмеричном, десятичном и шестнадцатеричном значениях вместе, а для побитовых операций он также показывает подписанное чтение и расположение битов на выбранной вами ширине.
Какие операции он поддерживает?
Два семейства, и держать их прямо - это вся игра. арифметические операции складываются, вычитаются, умножаются, делятся, и по модулю. они действуют на истинное числовое значение, поэтому они ведут себя как обычная математика и не заботятся о битовой ширине. деление возвращает целое число и сообщает любой остаток, а по модулю возвращает только остаток, который является различием, которое люди чаще всего получают назад.
Побитовые операции - ЭТО И, ИЛИ, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, ИЛИ-НЕ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ-НЕ, а также сдвиги влево и вправо. Они действуют на необработанные биты внутри фиксированного регистра, поэтому их ответ полностью зависит от того, насколько широк этот регистр. И, ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ - это повседневные три: И маскирует биты, ИЛИ устанавливает биты, ИЛИ переключает их. Отрицаемые формы, И-НЕ, ИЛИ и XNOR, являются их дополнениями в пределах ширины. НЕ переворачивает каждый бит. Сдвиги перемещают весь шаблон влево или вправо на несколько позиций, отбрасывая биты, которые падают с конца.
Вот быстрая ментальная модель, которую я использую, решая, какую из них я хочу:
| Операция | Символ | Семья | Типичное использование |
|---|---|---|---|
| Добавить /Вычесть | + /- | Арифметика | Обычная целочисленная математика любого размера |
| Умножьте/разделите | × / ÷ | Арифметика | Отчеты подразделений о коэффициенте и остатке |
| Модуло | мод | Арифметика | Только остальная часть, например, индексация по принципу "обводки" |
| И | &амп; | Битовый | Маска отбивает биты, тестирует флаг |
| ИЛИ | | | Битовый | Устанавливайте флаги, комбинируйте маски |
| КСОР | ^ | Битовый | Переключить биты, дешевый паритет и свопы |
| НЕ | ~ | Битовый | Инвертируйте каждый бит в пределах ширины |
| Сдвиг влево/вправо | << / >> | Битовый | Умножьте или разделите на степени двойки, упакуйте поля |
Почему мне нужно выбрать небольшую ширину?
Это вопрос, который спотыкает всех новых к побитовой математике, и это тот, о котором калькулятор больше всего самоуверен. Арифметика имеет очевидный ответ независимо от размера: пять плюс три - это восемь, представляете ли вы это в байте или 64-битном слове. Но побитовый НЕ имеет ответа вообще, пока вы не узнаете, сколько битов существует. НЕ из пяти - это "переверните каждый бит, & quot; и результат зависит от того, есть ли восемь битов или шестьдесят четыре, чтобы перевернуть.
Сдвиги имеют ту же зависимость от другого направления. Сдвиньте значение достаточно далеко, и биты отходят от верхнего края. Исчезают ли они или завернуты, зависит от размера регистра. Целочисленный тип фиксированной ширины в C, Java, Go или Rust отвечает на этот вопрос, определяя ширину впереди: a uint8 это восемь бит, а uint32 тридцать два, и каждая побитовая операция происходит внутри этого ящика. калькулятор отражает это точно, позволяя вам выбрать 8, 16, 32 или 64 бита, поэтому результат соответствует тому, что будет производить ваш фактический код, а не идеализированной абстракции бесконечной ширины.
Выбор неправильной ширины не является ошибкой округления, это другой ответ. НЕ из пяти это 250 в восьми битах и 4294967290 в тридцати двух. оба правильно для их ширины, и ни один не является правильным для другого. В привычку устанавливать ширину, чтобы соответствовать вашему типу данных, входит единственная наиболее полезная дисциплина, которую поощряет этот инструмент.
Как дополнение два и #39; появляются в результатах?
Почти каждый процессор представляет собой целые числа со знаком дополняют два и #39;s, и калькулятор следует тому же соглашению, поэтому его вывод соответствует вашему оборудованию. В дополнении два's верхний бит регистра имеет отрицательный вес, поэтому восьмибитный шаблон 11111010 читается как 250, если вы рассматриваете его как неподписанный, или как -6, если вы читаете верхний бит как знак.
Вот почему инструмент сообщает оба показания для побитового результата, Когда вы запускаете НЕ на пяти в восьми битах, вы получаете битовый шаблон 1111010 Калькулятор показывает беззнаковое значение 250, значение со знаком -6, и двоичный макет, так что вы можете видеть, что они являются одинаковыми битами интерпретируются двумя способами. что двойное чтение - это именно то, что вам нужно, когда значение пересекает между подписанным и беззнаковым типом в вашем коде, который является классическим источником "невозможно & quot; числа, появляющиеся в журналах.
Арифметические результаты следуют тому же правилу, когда они становятся отрицательными. вычтите двенадцать из пяти, и истинный ответ будет равен -7, который калькулятор показывает в десятичном с знаком минус, в то время как его двоичная, восьмеричная и шестнадцатеричная формы используют шаблон дополнения два's- в пределах выбранной вами ширины, 11111001 в восьми битах. Видеть отрицательное значение и его битовый шаблон рядом - это то, как абстрактная идея " знак - это просто верхний бит" наконец щелчки.
Как сложить или вычесть двоичные числа вручную и проверить это здесь?
Бинарное сложение следует тем же правилам переноса, что и десятичное, с меньшим алфавитом. ноль плюс ноль равно нулю, ноль плюс один равно нулю один переносить, а один плюс один плюс один плюс перенос равно одному переносить один. Итак, 1010 плюс 1100 работает столбец за столбцом справа: 0+0 равно 0, 1+0 равно 1, 0+1 равно 1, 1+1 равно 0 переносить 1, и перенос становится ведущим битом, давая 10110, что равно 22 в десятичном формате. Пробивая это в калькулятор, подтверждаю это сразу в каждой базе, так я проверяю арифметику рук, когда переучиваю ее для интервью или учу кому-то.
Вычитание - это когда дополнение два 's зарабатывает свое удержание. Вместо того, чтобы брать взаймы по столбцам, компьютеры вычитают, добавляя отрицательное, а отрицательное образуется путем инвертирования битов и добавления одного. Вам редко нужно делать это вручную, но это объясняет, почему калькулятор может вычесть в отрицательную территорию чисто: 5 минус 12 становится 5 плюс два 's-дополнение 12, и в результате получается шаблон -7, описанный выше. Если вы хотите перемещать одно значение между базами, не выполняя на нем никаких вычислений, Конвертер базы номеров является сопутствующим инструментом, и бинарный переводчик обрабатывает случай, когда вы превращаете текст в биты, а не занимаетесь арифметикой.
Когда побитовые операции действительно имеют значение?
Чаще, чем ожидают новички, и в местах, которые не являются явно & quot;low level. & quot; системы разрешений - это классический случай: набор флагов, упакованных в одно целое число, где вы ИЛИ для предоставления разрешения, И с дополнением для его отзыва, и И для тестирования одного. переключатели функций, режимы файлов Unix и карты аппаратных регистров - все используют один и тот же шаблон. если вы когда-либо видели значение, подобное 0o755 или константу, определенную как 1 << 3, вы встретили бит-пакинг.
XOR проявляется как в дешевых трюках, так и в реальных алгоритмах: немного переключении, вычислении четности и классическом обмене без темпа. Сдвиги умножаются и делятся на степени два, намного быстрее, чем общее умножение, и они упаковывают несколько маленьких полей в одно слово, в результате чего значения цветов, сетевые заголовки и компактные форматы сериализации остаются небольшими. Я нажимаю на эти постоянно создаваемые элементы в стеке, от API Laravel, который хранит флаги ролей в виде растровой маски, до холста React, который считывает RGBA из упакованного целого числа. Понимание операций - это небольшая инвестиция, которая окупается повсюду, и я написал о том, как они подходят к более широкому набору в стеке Инструменты повышения производительности разработчик кусок.
Тонкие сбои - это то, что делает видимый калькулятор достойным использования Маска, примененная на неправильной ширине, молча сохраняет или сбрасывает биты, которые вы не предполагали. сдвиг, который предполагал 32 бита, ведет себя по-другому на 64. Значение со знаком ANDed против неподписанной маски производит число, которое выглядит невозможным, пока вы не увидите биты с двумя & # 39;s-дополнениями. Наблюдение за изменением расположения битов при настройке ширины превращает эти ошибки из загадок в очевидные ошибки.
Здесь также есть угол обучения Когда я объясняю растровые маски кому-то новому, десятичные числа бесполезны: 12 И 10 быть 8 ничего не значит, пока вы выстроитесь в линию 1100 и 1010 и не посмотрите И сохранить только столбец где оба равны 1. Потому что калькулятор показывает двоичную раскладку рядом с десятичной, восьмеричной, и шестнадцатеричной, он делает это выравнивание для вас, и операция перестает быть правилом для запоминания и становится что-то вы можете видеть То же самое верно для сдвигов, где показывая, что левый сдвиг на один удваивает значение, скользя каждый бит один столбец слева соединяет арифметическое значение с механикой битового уровня таким образом, что единичное число никогда не может.
Каковы пределы и являются ли мои данные конфиденциальными?
Арифметическая сторона фактически не имеет ограничения по размеру. Калькулятор использует JavaScript's БольшойInt, целочисленный тип произвольной точности, стандартизированный в ECMAScriptтаким образом, сложение или умножение чисел десятками цифр остается точным без молчаливого переполнения. Это реальное преимущество перед калькуляторами, построенными на обычных числах с плавающей запятой, которые теряют точность примерно за пятнадцать цифр и вообще не могут точно представлять большие целые числа.
Побитовая сторона намеренно ограничена выбранной вами шириной, потому что это точка: операция фиксированной ширины имеет смысл только внутри фиксированного регистра. Если вы вводите значение, большее, чем может удерживать ширина, калькулятор уменьшает его до этой ширины и предупреждает вас, поэтому усечение никогда не происходит бесшумно. Сдвиги ограничены разумным максимумом, поэтому количество неконтролируемого сдвига не может повесить страницу.
В конфиденциальности все работает в вашем браузере. Ничего из того, что вы вводите, не загружается, не регистрируется и не сохраняется, и инструмент продолжает работать, если вы отключитесь от Интернета после загрузки страницы. Это имеет большее значение, чем звучит: значения, которые люди используют через побитовый калькулятор, часто являются масками разрешений, токенами или адресами оборудования из систем, которые они предпочли бы не вставлять на сервер, который они не контролируют. Если вас волнует, какие инструменты хранят ваши данные на вашем компьютере, то Конфиденциальность данных в онлайн-инстру руководство рассказывает, как рассказать об инструментах на стороне клиента от тех, кто звонит домой. Для соседней работы низкого уровня Преобразователь IEEE 754 и тот АСКИИ завершать сет.
Часто задаваемые вопросы
Как сложить два двоичных числа?
Установите входную базу в двоичный, введите первое число, выберите Добавить, введите второе число и прочитайте результат Например, 1010 плюс 1100 - это 10110, которое инструмент также показывает как 22 в десятичном, 26 в восьмеричном и 16 в шестнадцатеричном. арифметика точна на любой длине.
В чем разница между арифметическими и побитовыми операциями?
Арифметические операции (сложение, вычитание, умножение, деление, по модулю) действуют на истинное числовое значение и не зависят от разрядности битов. побитовые операции (И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ и сдвиги) действуют на необработанные биты внутри регистра фиксированной ширины, поэтому их результат зависит от того, выберете ли вы 8, 16, 32 или 64 бита.
Почему мне нужно выбрать небольшую ширину?
НЕ и операции сдвига имеют определенный ответ только после того, как размер регистра известен, потому что они зависят от того, какие биты существуют и какие отпадают от конца Выбор 8, 16, 32 или 64 битов делает калькулятор совпадающим с тем, как конкретный целочисленный тип ведет себя на реальном языке программирования.
Как калькулятор справляется с отрицательными результатами?
Отрицательные арифметические результаты показаны со знаком минус в десятичной дроби, а их двоичная, восьмеричная и шестнадцатеричная формы используют дополнение два's в пределах выбранной ширины. Для побитовых результатов инструмент сообщает как значение без знака, так и значение дополнения со знаком два's.
Могу ли я смешать основания, например, добавить шестнадцатеричное число к десятичному?
Оба операнда считываются в выбранной вами единой базе, поэтому вы не можете смешивать базы в одном вычислении. чтобы объединить шестнадцатеричное и десятичное значение, сначала преобразуйте один из них, затем введите оба в одну базу. результат всегда отображается во всех четырех базах.
Что делает калькулятор, когда я делю?
Деление возвращает целочисленное частное, и если деление не является точным, инструмент сообщает остаток в виде примечания. Чтобы получить остаток самостоятельно, вместо этого используйте операцию Modulo, которая возвращает только остаток.
Насколько большими могут быть цифры?
Арифметика использует JavaScript BigInt, поэтому числа со многими десятками цифр обрабатываются точно без переполнения. Побитовые операции ограничены выбранной шириной; значения, превышающие его, уменьшаются до этой ширины, и инструмент предупреждает вас, когда это произойдет.
Мои данные куда-нибудь отправляются?
Нет. каждое вычисление выполняется как JavaScript в вашем браузере. Ничто из того, что вы вводите, не передается, не регистрируется и не сохраняется, и инструмент продолжает работать, если вы отключитесь от Интернета после загрузки страницы.
Попробуйте посчитать сами с бесплатным Бинарный калькулятор. Он обрабатывает арифметические и побитовые операции в двоичном, восьмеричном, десятичном и шестнадцатеричном формате полностью в вашем браузере, без загрузки.



