Конвертер систем счисления и дополнительный код
Ваши данные
Ведущие 0b, 0o или 0x принимаются и игнорируются, как и пробелы с подчёркиваниями между цифрами.
Результаты
Сколько стоят эти биты при выбранном вами чтении
—
| Те же самые биты при другом чтении | — |
| В двоичной | — |
| В шестнадцатеричной | — |
| В восьмеричной | — |
| Всё, что вмещает эта разрядность | — |
Отрицание, шаг за шагом
| Начните с битов | — |
| Переверните каждый | — |
| Прибавьте единицу — вот и отрицательное | — |
| А это | — |
Инвертировать биты и прибавить единицу — то же самое, что вычесть из двойки в степени разрядности, и это проверено на всех двухстах пятидесяти шести комбинациях восьми бит. Сделанное дважды, оно всегда возвращает исходное, и именно на этом свойстве держится вся схема.
Эта страница считает целыми числами любого размера, а не привычной плавающей точкой, потому что примерно с девяти квадриллионов обычный тип начинает пропускать значения: два в пятьдесят третьей плюс один выходит как два в пятьдесят третьей. На шестидесяти четырёх битах это молча давало бы неверные ответы.
Почему 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.
Это не страница проявляет мягкость — это делает железо. Показать ошибку значило бы спрятать ровно то поведение, которое и порождает баг, ради понимания которого вы, скорее всего, сюда пришли.
Реакции
0
0 Комментарии
Прокомментируйте первым