excellent resource on float
Address +3 +2 +1 +0
Format SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
S представляет знаковый бит, где 1 отрицателен и 0 положительна.
Е является дополнение до двух показателей со смещением 127.
М представляет собой 23-битная нормализуются мантисса. Старший бит всегда 1 и, следовательно, не хранится
Тогда смотрите here для дополнения до двух
Я буду использовать Num как массив битов, я знаю, что это ISN» т стандартного диапазона массива C получающий доступ, но вы получите точку
Таким образом, для базового алгоритма, мы начинаем с заполнением из S.
bit S = 0;
if (num[0] ==1) {
S = 1;
num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1
}
Теперь мы установили S и у нас есть скалярное значение для остальной части числа.
Затем мы можем поместить наш номер в мантиссу, найдя первый индекс 1. Который также позволит найти экспонента. Обратите внимание, что показатель всегда будет положительным, так как мы не можем иметь дробные значения int. (Также, сделать особый случай для проверки, если значение равно 0 первых, чтобы избежать бесконечного цикла здесь, или просто изменить цикл надлежащим образом, я ленивый)
int pos = 1;
signed byte E = 32;
bit[23] M;
while(num[pos] == 0) {
--E;
++pos;
}
int finalPos = min(32, pos+23); //don't get too many bits
M = num[pos+1..finalPos]; //set the mantissa bits
Тогда вы строите свой поплавок с бит в S, E, M
Что вы подразумеваете под «преобразованием целого в двоичный»? Он уже находится в двоичном формате ... –