Если вы немного просмотрите Википедию и другие места, вы узнаете, что стандарты с плавающей запятой (существуют разные стандарты, IEEE754 является наиболее известным, поскольку он используется на настольных компьютерах и т. вычисляются быстрее)) "нормализует" число. С плавающей запятой все зависит от того, где находится десятичная точка, целое число без плавающей запятой имеет подразумеваемую десятичную точку справа от числа.
00111111010000000000000000000000. <--- here
кроме всех нулей для нормализации, давайте предположим, что мы используем формат, который хочет, чтобы число было 1.xxxx в двоичном формате, поэтому нам нужно переместить нашу десятичную точку
001.11111010000000000000000000000
десятичный знак был перемещен сразу после самого значимого (так что только одна 1 находится слева от десятичной точки).
если вы помните из школьного курса математики, то 123 можно записать как 1,23 * 10^2 (десять в степени 2). 123 тоже 123*10^0. Каждое место, на которое вы перемещаете десятичную дробь влево в числе с основанием 10, увеличивает степень числа 10 на единицу. Каждое место справа уменьшается. В двоичном коде, основанном на 2, нет никакой разницы, каждое место, где вы перемещаете десятичную дробь влево, увеличивает степень 2 (двоичное число — это основание 2), на каждое место вправо вы уменьшаете степень 2.
Итак, чтобы быть точным, наш номер сейчас
1.1111101 * 2^30
Теперь вступают в игру детали формата с плавающей запятой. Поскольку предполагается, что 1 слева от десятичной точки (за исключением точного числа ноль и некоторых других исключений) присутствует, иногда его нет в окончательном двоичном представлении для этого числа с плавающей запятой, это пустая трата места для поместите бит, который, как мы знаем, всегда равен единице, когда вместо этого мы могли бы иметь еще один бит для мантиссы. Мантиссы часто выражаются в двоичном формате, экспонента - это та, которая заставляет вас почесать голову, особенно с IEEE754. Например, показатель степени 128 в двоичном формате числа может представлять 2 в степени 0, а 129 может быть 2 в степени 1 и так далее. это может показаться странным, но для некоторых из этих форматов это не что иное, как поле дополнения до двух, в других есть другие способы сделать что-то. Одиночный, двойной, расширенный имеют разное количество битов для показателя степени, и вам нужно выяснить, что вы добавляете к реальному показателю (в данном случае 30), чтобы получить битовый шаблон, который идет в поле показателя степени числа с плавающей запятой.
другой пример
0000000000000000000000000000000000000101
было бы
1.01 * 2^2
если вы начинаете с 32-битного целого числа (не с плавающей запятой) и хотите получить 32-битное число с плавающей запятой, вы, очевидно, не можете сохранить все детали этого числа, поскольку для числа с плавающей запятой требуется бит знака и показатель степени, а также мантисса, мантисса меньше 32 бит, поэтому вы отбрасываете младшие значащие биты
1000000000000000000000000000001
в какой-то момент будет отрублен:
1.000000000000000 * 2^something
person
old_timer
schedule
24.01.2013