Конвертер систем счисления и дополнительный код

Ваши данные

Ведущие 0b, 0o или 0x принимаются и игнорируются, как и пробелы с подчёркиваниями между цифрами.

Результаты

Сколько стоят эти биты при выбранном вами чтении

Те же самые биты при другом чтении
В двоичной
В шестнадцатеричной
В восьмеричной
Всё, что вмещает эта разрядность

Отрицание, шаг за шагом

Начните с битов
Переверните каждый
Прибавьте единицу — вот и отрицательное
А это

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

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

Реакции

0

0 Комментарии

User profile image

Прокомментируйте первым

Почему 200 выходит как минус 56?

Потому что 200 и минус 56 — это одни и те же восемь бит: 11001000. Ничто в этих битах не говорит, что именно вы имели в виду. Разрядность и способ чтения задаются в другом месте, тем, кто писал программу, а биты подходят к обоим ответам.

Вся разница — в самом левом бите. Пока он выключен, оба чтения совпадают в точности, и поэтому расхождение остаётся невидимым, пока значение не перейдёт середину.

Почему диапазон от минус 128 до 127, а не от минус 127 до 127?

Потому что нулю нужно где-то жить, и живёт он на положительной стороне. Восемь бит дают 256 разных комбинаций; одна уходит на ноль, остаётся 255 на двоих. Делится это как 127 положительных и 128 отрицательных, так что отрицательной стороне достаётся на один больше.

На любой разрядности так же: 16 бит — от минус 32768 до 32767, а 64 бита — от минус 9223372036854775808 до 9223372036854775807.

Есть ли число без противоположного?

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

Инвертируйте биты 10000000 — получится 01111111; прибавьте единицу — и вы снова на 10000000. Отрицание возвращает то же самое число. Эта страница показывает это, а не прячет, и свойство проверено на 8, 16, 32 и 64 битах.

Что происходит, когда число не помещается?

Оно заворачивается по кругу, и эта страница показывает это, а не отказывается считать. Записать 300 в восемь бит — значит сохранить 44, а записать минус 129 — сохранить 127.

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