Замена бит в числе формата 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;
}