Побитовые операции с float - C (СИ)

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

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

Установить в заданное пользователем состояние определённое количество рядом стоящих бит, номер старшего бита, как и всё остальное, вводится с клавиатуры. Вот моя программа , она написана для int. Она рабочая, но требуется сделать еще так, чтобы она работала для формата float. Я понимаю, что это можно сделать несколькими способами: с помощью указателя, с помощью union,с помощью файла, но как это применить ума не приложу. Весь интернет облазила подобных примеров не нашла. Помогите пожалуйста.

Решение задачи: «Побитовые операции с float»

textual
Листинг программы
#include <stdio.h>
void bit_print(unsigned int *pif)
{
    int i=0;
    int y=sizeof(*pif)*8-1;
    for (i=y; i>=0; --i) {
        printf ("%x", (*pif)>>i & 1);
        if (i!=y && i%4==0) printf(" ");
    }
    printf ("\n");
};
int main ()
{
    float x=2.3;
    unsigned int ix1=0x40133333;
    unsigned int ix2=0xc0133333;
    unsigned int * pif;
    pif=(void*)&x;
    bit_print(pif);
    pif=&ix1;
    bit_print(pif);
    x=-x;
    pif=(void*)&x;
    bit_print(pif);
    pif=&ix2;
    bit_print(pif);
    return 0;
}

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

В этом коде выполняются побитовые операции с целыми числами, которые представляют float.

  1. Создается функция bit_print, которая принимает указатель на unsigned int в качестве аргумента.
  2. Внутри функции создаются две переменные: i и y.
    • i инициализируется значением y, которое равно размеру типа unsigned int, умноженному на 8 и уменьшенному на 1.
    • y инициализируется значением sizeof(*pif)*8-1, где sizeof(*pif) возвращает размер типа, который указывает pif, и умножается на 8 для получения максимального бита.
  3. Затем следует цикл for, который начинается с y и итерируется вниз до 0.
    • Внутри цикла происходит следующее:
      • Используется оператор побитовой сдвига >> для сдвига битов числа, на которое указывает pif, вправо на i позиций.
      • Используется оператор побитовой И & для получения бита в позиции i.
      • Используется оператор printf для вывода бита в десятичном формате.
      • Если i не равно y и i делится на 4 без остатка, то выводится пробел.
  4. В конце функции выводится символ новой строки \n.
  5. В функции main создаются следующие переменные:
    • x инициализируется значением 2.3.
    • ix1 и ix2 инициализируются значениями 0x40133333 и 0xc0133333 соответственно.
    • pif инициализируется значением NULL, а затем приводится к типу void* и переприсваивается значению адреса переменной x.
  6. Функция bit_print вызывается с аргументом pif.
  7. Значение pif изменяется на адрес ix1.
  8. Функция bit_print вызывается с аргументом pif.
  9. Значение x изменяется на противоположное.
  10. Значение pif изменяется на адрес x.
  11. Функция bit_print вызывается с аргументом pif.
  12. Значение pif изменяется на адрес ix2.
  13. Функция bit_print вызывается с аргументом pif.
  14. Программа возвращает 0, завершая работу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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