-3

Предположим, у меня есть дробное десятичное число, как 0,21

Может ли калькулятор Windows преобразовать это в двоичный файл?

Если я пытаюсь ввести 0.21 в режиме программирования, он не отвечает на десятичную точку. Как будто я не могу набрать десятичную точку в режиме программиста .. И я не могу набрать двоичную точку в режиме программиста, когда я выбираю двоичный файл в режиме программиста. «Точка» кажется отключенной.

Я использую Windows 7. Я не знаю, было ли это включено в Windows 10?

добавленной
Или как насчет более простого примера, такого как 2.5 или 5.125? Итак, дробная часть, которая может быть представлена в двоичном виде? Таким образом, для 2.5 это calc должно показывать 010.10 или 1.10 * 2 ^ 3. Или для 5.125 кальций должен показывать 0101.001 или 1.01001 * 2 ^ 5 Может ли калькулятор Windows показывать это?

2 ответа2

2

@Keltari Как правило, значение дроби МОЖЕТ быть представлено в двоичном виде, используя вид "двоичной точки" (аналог десятичной точки). Фактически, именно так на компьютерах представляются действительные / двойные числа (хотя обычно хранится двоичная точка, а не "точка"). Но помните: не все десятичные дроби могут быть представлены точно в двоичной форме - тогда необходимо применить некоторое округление, особенно если можно использовать только ограниченное количество битов (что всегда верно в реальном мире информатики).

К сожалению, Windows-калькулятор в режиме программиста работает только с целочисленными значениями. Обходной путь для достижения вашей цели:

  1. В стандартном режиме введите десятичное число (может быть дробным) для преобразования, например, 0 . 2 1

  2. Умножьте это на 2 (ключи: * 2 =)

  3. Повторяйте шаг 2 (нажимая = одну клавишу, снова и снова), пока не получите число, которое является целым числом - или очень близко к целому числу (см. Примечание ниже).

    ВАЖНЫЙ! Помните, сколько раз вы умножили начальное значение на 2 (на шаге 2 и повторили 3).

  4. Переключитесь в режим программиста и введите значение, полученное после шага 3, с округлением до целого числа (к сожалению, это не происходит автоматически при переключении режима, по крайней мере, в приложении калькулятора Windows 10).

  5. Двоичное представление целого числа показано. Представьте себе, двоичная точка находится справа (после последней двоичной цифры). Затем переместите его влево на столько позиций, сколько умножили на шагах 2 и 3. При необходимости добавьте начальные 0.

Пример:

  • Исходное значение: 0.21
  • Умножьте это на 2 десять раз - вы получите 215,04 . Предполагая, что это достаточно близко к целочисленному значению (это произвольное решение!), Вы получите округленное целое число 215
  • Ввод 215 в режиме программиста показывает его двоичное представление: 11010111
  • Перемещение двоичной точки на 10 мест влево дает: .0011010111

Примечание. Как я уже упоминал ранее, не все значения десятичной дроби могут быть представлены точно в двоичной форме, поэтому иногда вы должны решить, какая точность (приближение) удовлетворяет вашим потребностям. В приведенном выше примере я предположил, что округление 215,04 до 215 является сравнительно небольшой "ошибкой" (ниже 1/5000), поэтому для представления исходного числа было достаточно 10 битов. Если бы мне требовалась большая точность, я бы умножил на 2 не десять, а, может быть, двадцать раз (результат: 220200,96 округленный до 220201 как целое число) и получил бы 20-разрядное двоичное представление .00110101110000101001 (с "ошибкой" ниже 1/5000000).

Кстати, обычно количество битов, используемых для представления данных в компьютерах, составляет 2–8, 16, 32, 64, иногда 48 и т.д. В таком случае вы можете просто использовать более быстрый метод "умножения на 2" в калькуляторе, предложенный от вас в комментарии ниже (*(2^n)).

1

Таким образом, способ представления дроби в памяти соответствует стандарту IEEE-754 для чисел с плавающей запятой.

Число, столь же простое, как десятичное 123, когда оно хранится как число с плавающей запятой (например, 123.0), фактически сохраняется как 1.921875 * 2^6 = 1.921875 * 64

Думайте об этом как о научной нотации, которая представляет a * 10^b , где a должно быть [1, 10) (то есть от 1,0 до, но не включая 10, например, 9,999 ... 8)

Ваш номер 0.21 хранится в памяти как 1.6799999475479126 * 2^(-3) что эквивалентно 0.20999999344348907470703125 (Windows Calculator показывает это как 0.209999993443489075 при расчете вручную)

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

Теперь, чтобы ответить на ваш вопрос, хотя калькулятор Windows хранит числа в этой форме, он не предназначен для показа промежуточных / необработанных значений в памяти. Если вам действительно это нравится, вы можете использовать инструмент просмотра памяти и шпионить за значениями при вводе их в калькулятор, но, опять же, это другая тема ...

Проверьте https://www.h-schmidt.net/FloatConverter/IEEE754.html, чтобы иметь представление о том, как числа с плавающей запятой хранятся и представляются.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .