Double to binary или как узнать сколько бит в числе? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно узнать сколько бит в числе, оно может быть любым:1-целое положительное(напр 3),2-целое отрицательное(-3),3-число положительное с дробной частью(3.14)4- число отрицательное с дробной частью Пробовала код реализовать школьным способом(деление на два+остаток с целой частью и умножение с дробной) Оказывается, double в бинарном виде записывается по другому...Например 10.5 в бинарном 1010.1=3 единички а вот в бинарном double это будет 0 10000000010 0101000000000000000000000000000000000000000000000000 - уже 4 единички... Обьясните пожалуйста, как реализовать запись числа по (IEEE754 Double precision 64-bit). Почитала про то, как представляются числа с плавающей точкой, но так и не поняла... формула ((-1)^s)*M*N^e,s — знак, N-основание, e — порядок, а M — мантисса... Ну и как мне по этой формуле записать число например 3.5? Или есть ли способ подсчитать число бит в числе?

Решение задачи: «Double to binary или как узнать сколько бит в числе?»

textual
Листинг программы
double x;
unsigned char *px = (unsigned char *)(&x);
int Nbit = 0;
for(i=0; i<sizeof(x); i++) {
  unsigned char cx = *(px+i);
  for (j=0; j<8; j++)
    Nbit += (cx>>j)&1;
}

Объяснение кода листинга программы

В данном коде:

  1. Объявляется переменная типа double x, которая будет использоваться в дальнейшем.
  2. При помощи оператора reinterpret_cast происходит приведение адреса переменной x к типу unsigned char*, что позволяет рассматривать память, занимаемую переменной x, как последовательность байтов.
  3. Объявляется переменная типа int Nbit, которая будет использоваться для подсчета количества бит в числе.
  4. В цикле for перебираются все байты, которые занимают число x.
  5. Для каждого байта выполняется внутренний цикл for, который перебирает все 8 бит данного байта.
  6. Внутренний цикл вычисляет количество бит, равное значению бита, сдвинутого на текущую позицию (j) вправо (>>) и умноженного на 1 (&1).
  7. Результаты всех вычислений складываются в переменную Nbit.
  8. В конце цикла переменная Nbit будет содержать общее количество бит числа x.

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы