Замена бит в числе формата float - C (СИ)
Формулировка задачи:
Доброго времени суток!
Помогите, пожалуйста, с лабораторной работой.
Задача следующая:
Вводим с клавы десятичное число формата float.
Далее на экран надо вывести переведенное это число в двоичный код.
После чего ввести 3 числа (первое и второе число могут быть от 0 до 31,т.к. бит всего 32, а третье число 0 или 1)
И заменить с Х1 по Х2 бит нулями или единицами.
Чтоб было понятнее пример:
ввели какое-нибудь число и на экран вывелось
01000111100001 (короткий пример, не 32 бита)
далее вводим 5 и 8. а также 0
и на экране после ввода и преобразования видим:
01000000000001
Надеюсь суть понятна
P.S. Программируем мы на лабах в Си, не в Си++
P.P.S. Первую часть я написал сам (перевод числа из десятичной формы в двоичную, препод одобрил)
вот эта часть:
#include <stdio.h> #include <conio.h> void main(void) { clrscr(); float m; int i; long *z; scanf("%f",&m); printf("Vy vveli chislo m=%.2f\n",m); z=(long*)&m; for(i=0;i<32;i++) { printf("%d",(*z)>>(31-i)&1); } getch(); }
Решение задачи: «Замена бит в числе формата float»
textual
Листинг программы
#include <stdio.h> #include <limits.h> int main() { int i; /* счетчик */ int low = 12; /* младший и старшиий бит, */ int high = 24; /* между которыми должна происходить замена значений */ int value = 1; /* заполнитель, 0 или 1 */ unsigned x = 0xFF0F0F0F; /* исходное число */ /* вывод исходного числа в двоичном виде */ for (i = 32 - 1; i != 0; --i) { printf ("%d", (x >> i) & 1); } printf ("\n"); /* вычисление битовой маски и */ /* применение ее к исходному числу */ /* это просто магия */ if (value == 1) x |= (0xFFFFFFFF << (low - 1)) & (0xFFFFFFFF >> (32 - high)); if (value == 0) x &= (0xFFFFFFFF << (low - 1)) ^ (0xFFFFFFFF >> (32 - high)); /* вывод измененного числа */ for (i = 32 - 1; i != 0; --i) { printf ("%d", (x >> i) & 1); } printf ("\n"); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д