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