У меня есть следующее упражнение:
Реализация функции void с плавающей запятой в битах (с плавающей запятой x), которая печатает представление битов x.Подсказка: приведение числа с плавающей точкой к int усекает дробную часть, но информация не теряется при наведении указателя с плавающей точкой на указатель на int.
Теперь я знаю, что число с плавающей точкой представлено битом знаканекоторые биты для его мантиссы, некоторые биты для основы и несколько бит для показателя степени.Сколько бит используется, зависит от моей системы.
Проблема, с которой мы здесь сталкиваемся, состоит в том, что наше число состоит из двух частей.Давайте рассмотрим 8.7
, битовое представление этого числа будет (на мой взгляд) следующим: 1000.0111
Теперь числа с плавающей запятой хранятся с начальным нулем, поэтому 8.8
станет 0.88*10^1
Так что я каким-то образом должен вытащить всю информацию из моей памяти.Я действительно не понимаю, как я должен это сделать.На что мне намекает этот намек?В чем разница между целочисленным указателем и указателем с плавающей точкой?
В настоящее время у меня есть это:
void float_to_bits() {
float a = 4.2345678f;
int* b;
b = (int*)(&a);
*b = a;
std::cout << *(b) << "\n";
}
Но я действительно не вижу здесь большей картины за подсказкой.Как мне получить мантиссу, показатель степени, знак и основу?Я также попытался поиграть с побитовыми операторами >>, <<.Но я просто не понимаю, как это должно мне здесь помочь, поскольку они не изменят позицию указателей.Полезно получить, например, битовое представление целого числа, но это все, понятия не имею, для чего он здесь нужен. </p>