В двоичной нотации, каково значение цифр после точки счисления "."?
У меня есть этот пример о том, как преобразовать из базового числа 10 в представление float IEEE 754
Number: 45.25 (base 10) = 101101.01 (base 2) Sign: 0
Normalized form N = 1.0110101 * 2^5
Exponent esp = 5 E = 5 + 127 = 132 (base 10) = 10000100 (base 2)
IEEE 754: 0 10000100 01101010000000000000000
Это имеет смысл для меня, кроме одного прохода:
45.25 (base 10) = 101101.01 (base 2)
45 - это 101101 в двоичном коде, и это нормально... но как они получили 0,25 как 0,01?
Ответы
Ответ 1
Вы можете преобразовать деталь после десятичной точки в другую базу, повторно умножая на новую базу (в этом случае новая база равна 2), например:
0.25 * 2 = 0.5
- > Первая двоичная цифра равна 0 (взять неотъемлемую часть, т.е. часть до десятичной точки).
Продолжить умножение на часть после десятичной точки:
0.5 * 2 = 1.0
- > Вторая двоичная цифра равна 1 (опять же, возьмите неотъемлемую часть).
Здесь также останавливается, потому что часть после десятичной точки теперь равна нулю, поэтому больше нечего умножать.
Поэтому окончательное двоичное представление дробной части: 0,01 2.
Edit:
Также стоит отметить, что довольно часто бинарное представление бесконечно даже при запуске с конечной дробной частью в базе 10. Пример: преобразование 0,2 10 в двоичный:
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = ...
Итак, мы закончили с: 0.001100110011... 2.
Используя этот метод, вы видите довольно легко, если двоичное представление заканчивается бесконечным.
Ответ 2
Простое значение места. В базе 10 у вас есть следующие места:
... 10 3 10 2 10 1 10 0. 10 -1 10 -2 10 -3...
... тысячи, сотни, десятки, единицы. десятые, сотые, тысячные...
Аналогично, в двоичном (основание 2) у вас есть:
... 2 3 2 2 2 1 2 0. 2 -1 2 -2 2 -3...
... восемь, четыре, два, один. половинки, четверти, восьмые...
Итак, второе место после .
в двоичном выражении - это единицы 2 -2 хорошо известные вам как единицы 1/4 (или попеременно 0.25).
Ответ 3
"Десятичные числа" (дробные биты) в других базах на удивление непредсказуемы, поскольку они работают точно так же, как целые числа.
base 10
scinot 10e2 10e1 10e0 10e-1 10e-2 10e-3
weight 100.0 10.0 1.0 0.1 0.01 0.001
value 0 4 5 .2 5 0
base 2
scinot 2e6 2e5 2e4 2e3 2e2 2e1 2e0 2e-1 2e-2 2e-3
weight 64 32 16 8 4 2 1 .5 .25 .125
value 0 1 0 1 1 0 1 .0 1 0
Если мы начнем с 45.25, это больше/равно 32, поэтому мы добавим двоичный код 1 и вычтем 32.
Осталось 13.25, что меньше 16, поэтому мы добавляем двоичный код 0.
Осталось 13.25, что больше/равно 8, поэтому мы добавляем двоичный код 1 и вычитаем 8.
Осталось 05.25, что больше/равно 4, поэтому мы добавляем двоичный код 1 и вычитаем 4.
Осталось 01.25, что меньше, чем 2, поэтому мы добавляем двоичный код 0.
Осталось 01.25, что больше/равно 1, поэтому мы добавляем двоичный код 1 и вычитаем 1.
С целыми числами у нас осталось бы нулевое значение, поэтому мы остановимся. Но:
Осталось 00.25, что меньше 0,5, поэтому мы добавляем двоичный код 0.
Осталось 00.25, что больше/равно 0.25, поэтому мы добавляем двоичный код 1 и вычитаем 0.25.
Теперь у нас есть нуль, поэтому мы останавливаемся (или нет, вы можете продолжать и рассчитывать нули навсегда, если хотите)
Обратите внимание, что не все "простые" числа в десятичной форме всегда достигают нулевой точки остановки. 0.1 (десятичная), преобразованная в базу 2, бесконечно повторяется: 0.0001100110011001100110011... Однако все "простые" числа в двоичном формате всегда будут хорошо преобразовываться в базу 10.
Вы также можете выполнить этот же процесс с дробными (2.5), иррациональными (pi) или даже мнимыми (2i) базами, за исключением того, что база не может находиться между -1 и 1 включительно.
Ответ 4
2.000 10= 2 +1= 10.000 2
1.000 10= 2 +0= 01.000 2
0,500 10= 2 -1= 00.100 2
0.250 10= 2 -2= 00.010 2
0.125 10= 2 -3= 00.001 2
Ответ 5
База дробей 2 равна .1 = 1/2,.01 = 1/4....
Ответ 6
Подумайте об этом таким образом
(точка) 2 ^ -1 2 ^ -2 2 ^ -3 и т.д.
так
. 0/2 + 1/4 + 0/8 + 0/16 и т.д.
См. http://floating-point-gui.de/formats/binary/
Ответ 7
Вы можете думать о 0,25 как 1/4.
Разделение на 2 в (основание 2) перемещает десятичную точку на один шаг влево, так же, как деление на 10 дюймов (основание 10) перемещает десятичную точку на один шаг влево. Обычно деление на M в (основание M) перемещает десятичную точку на один шаг влево.
так
base 10 base 2
--------------------------------------
1 => 1
1/2 = 0.5 => 0.1
0.5/2 = 1/4 = 0.25 => 0.01
0.25/2 = 1/8 = 0.125 => 0.001
.
.
.
и др.