Как с помощью маски сдвинуть единицы в двузначном коде числа влево без потерь - 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; }
Объяснение кода листинга программы
- Подключение заголовочного файла
для использования функций ввода-вывода. - В функции main() объявлены две переменные: n и nn, равные 0.
- Выводится запрос на ввод числа n.
- С помощью оператора >> число n считывается в переменную n.
- В цикле for, начиная с i=1, с шагом 2 в переменной i происходит сдвиг на 1 разряда вправо.
- Вычисляется значение nn = n & i, т.е. маска, в которой единицы на позициях, соответствующих ненулевым битам числа n.
- Результат предыдущего шага (nn) сдвигается влево на 31 разряд (наибольшая степень двойки, которая не больше 32).
- Результат этого сдвига (который будет равен исходному числу n, но с единицами на позициях, соответствующих ненулевым битам) или исходное число n сдвинутое на 31 разряд влево (что приведет к переносу всех единиц на начало числа).
- Полученный результат присваивается переменной nn.
- Выводится значение переменной nn.
- Возвращается 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д