отличный ресурс на поплавке
Address +3 +2 +1 +0
Format SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
S представляет бит знака, где 1 отрицательно, а 0 положительно.
E - показатель степени дополнения к двум со смещением 127.
M - 23-битная нормализованная мантисса. Старший бит всегда равен 1
и, следовательно, не сохраняется
Тогда посмотрите здесь для дополнения до двух
Я буду использовать num в качестве массива битов, я знаю, что это не стандартный доступ к диапазону массива 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