Как с помощью маски сдвинуть единицы в двузначном коде числа влево без потерь - C (СИ)

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

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

Привет! подскажите пожалуйста как с помощью маски (или вообще как) сдвинуть единицы в двузначном коде числа влево без потерь и вывести потом десятичное значение получившегося числа в условиях нижеприведенной программы. текст программы такой:
#include<stdio.h>
#include<conio.h>
void main(void)
{
 clrscr();
 float m;
 int i,k;
 long *z;
 printf("vvedite chislo \n");
 scanf("%f",&m);
 printf("vedennoe vami chislo m=%f\n",m);
 z=(long*)&m;
 for(i=0;i<32;i++)
 {
   if(k<8)                                           
  {
   textcolor(k);
   cprintf("%d",(*z)>>(31-i)&1);
   k++;
  }
  else
    {
     k=1;
    }
 }
  getch();
}
Заранее благодарен.

Решение задачи: «Как с помощью маски сдвинуть единицы в двузначном коде числа влево без потерь»

textual
Листинг программы
#include <iostream>
int main(){
    int n,nn=0;
    std::cout<<"Enter n: ";
    std::cin>>n;
    for(int i=1;i;i<<=1)
        nn=(nn>>(int)(bool)(n&i))|(((int)(bool)(n&i))<<31);
    std::cout<<(unsigned)nn<<std::endl;
    return 0;
}

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

  1. Подключение заголовочного файла для использования функций ввода-вывода.
  2. В функции main() объявлены две переменные: n и nn, равные 0.
  3. Выводится запрос на ввод числа n.
  4. С помощью оператора >> число n считывается в переменную n.
  5. В цикле for, начиная с i=1, с шагом 2 в переменной i происходит сдвиг на 1 разряда вправо.
  6. Вычисляется значение nn = n & i, т.е. маска, в которой единицы на позициях, соответствующих ненулевым битам числа n.
  7. Результат предыдущего шага (nn) сдвигается влево на 31 разряд (наибольшая степень двойки, которая не больше 32).
  8. Результат этого сдвига (который будет равен исходному числу n, но с единицами на позициях, соответствующих ненулевым битам) или исходное число n сдвинутое на 31 разряд влево (что приведет к переносу всех единиц на начало числа).
  9. Полученный результат присваивается переменной nn.
  10. Выводится значение переменной nn.
  11. Возвращается 0, что означает успешный конец работы программы.

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


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

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

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