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

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


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

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

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