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

1056
barlop

Предположим, у меня есть дробное десятичное число, как 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 показывать это?

-3
Это потому, что вы не можете представлять дроби в двоичном виде. Keltari 6 лет назад 0
Не совсем правильно. Можно, но калькулятор Windows не показывает. Когда мы видим число, скажем `123`, мы даже не думаем таким образом, но в действительности число можно разбить на` 1 * 10 ^ 2 + 2 * 10 ^ 1 + 10 ^ 0`, та же логика, `123.45` - это` 1 * 10 ^ 2 + 2 * 10 ^ 1 + 3 * 10 ^ 0 + 4 * 10 ^ (- 1) + 5 * 10 ^ (- 2) `. Точно то же самое происходит с двоичной математикой, за исключением того, что у вас есть только 2 цифры (представленные `0` и` 1`) и основа системы - `2`, а не` 10`. Таким образом, `0.21` можно рассматривать как` 0.0011010111`, что приблизительно равно `0.209961`, я сделал только 10 двоичных цифр, стандарт IEEE-754 определяет намного больше ... nurchi 6 лет назад 0
@nurchi Ты имеешь в виду, что Келтари не прав. Вы отвечаете Келтари, а не мне, поэтому, пожалуйста, напишите AT Keltari в начале вашего комментария, чтобы было ясно, что вы обращались к нему, а не ко мне. barlop 6 лет назад 0
Похоже, я больше не могу редактировать свой комментарий, но да, я имел в виду комментарий @ Keltari, а не сам вопрос. nurchi 6 лет назад 0

2 ответа на вопрос

2
AnSi

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

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

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

  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)).

Очень интересно .. несколько замечаний .. A) шаг 2 можно ускорить с помощью кнопки x ^ y на калькуляторе окон. в научном режиме. например, 0,21 * 2 ^ 30 Целочисленная часть этого числа может быть преобразована в двоичную в калькуляторе Windows. Б) Там, где вы написали «умножьте это 10 раз на 2», я думаю, что вы имели в виду умножить это на 2 десять раз, / 10 раз, умножьте это на 2, то есть 2 ^ 10. barlop 6 лет назад 0
C) Интересно, что я выучил гораздо более медленный метод, чем ваш метод, метод, который я изучал, каждый раз, когда вы умножали его на два, если число <1, то пишите 0 в вашей строке результата. Если число> = 1, вы вычитаете единицу и записываете 1 в строку результата. , barlop 6 лет назад 0
@ barlop ad. A) Да, использование операции x ^ y намного быстрее и полезно, если вы заранее знаете, сколько битов вы собираетесь использовать для двоичного представления (_y_ в формуле). объявление. Б) Извините за вводящие в заблуждение выражения - английский не является языком моей мамы :-) - отредактировано, как вы предложили AnSi 6 лет назад 0
Хороший обходной путь, @AnSi nurchi 6 лет назад 0
Нет необходимости писать в первом предложении, что дроби «МОЖНО» представлять в двоичном виде. Я знаю, что они могут. Единственный человек, который сказал, что они не могут, это один комментатор "nurchi". Но предполагается, что ответ адресован человеку, который задал вопрос - мне. Таким образом, нет необходимости так резко указывать что-либо в вашем первом предложении, с чем я уже согласен. Все это первое предложение излишне. Я даже упомянул «двоичную точку» в своем вопросе, так что я хорошо знаю об этом barlop 6 лет назад 0
Почему вы сделали свое первое предложение «Как правило, значение дроби МОЖЕТ быть представлено в двоичном виде, используя вид« двоичной точки »(аналог десятичной точки)» Никто не сказал, что они не могут. И почему вы вводите термин «бинарная точка» для меня, как будто я не знаю его, когда уже знаю и сформулировал его в своем вопросе? barlop 6 лет назад 0
1
nurchi

Таким образом, способ представления дроби в памяти соответствует стандарту 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, чтобы иметь представление о том, как числа с плавающей запятой хранятся и представляются.

Я заметил, что этот веб-сайт дает для него двоичную строку, http://decimal-to-binary.com/decimal-to-binary-converter-online.html?id=2251 Но это также приблизительное значение, потому что его строка 0,00110101110 1/8 + 1/16 + 1/64 + 1/256 + 1/512 + 1/1024 = (128/1024 + 64/1024 + 16/1024 + 4/1024 + 2/1024 + 1/1024) = 215/2014 = 0,2099609375, что даже менее точно, чем приведенное вами приближение. barlop 6 лет назад 0