Сложности с побитовым сдвигом
Мы вводим число в формате double, затем вводим номер старшего бита(произвольно) и количество разрядов, при этом получается определенная "группа", внутри которой надо сделать циклический сдвиг вправо и влево. Как работать внутри "группы", а не двигать все число сразу?
{
char CH[8];
double DO;
}uni;
puts("Vvedite chislo (double):");
scanf("%lf",&uni.DO);
printf("%lf\n",uni.DO);
for(i=63;i>=0;i--){
printf("%d",(uni.CH[i/8]>>(i%8))&1);
if(i%8==0) printf(" ");
}
puts("\nVvedite nomer starshego bita:");
int starbit, group, k;
char nCH[6];
scanf("\n%d",&starbit);
puts("Vvedite kolichestvo razryadov:");
scanf("\n%d",&group);
for(;starbit>=0&&group>=0;starbit--,group--)
{
nCH[starbit/8]|=(1<<(starbit%8));
if(((uni.CH[starbit/8]>>(starbit%8))&1)==0){nCH[starbit/8]^=(1<<(starbit%8));}
}
вот код, но что-то в нем не так явно
У процессора отсутствуют команды прямой адресации битов. Поразрядные операции выполняют одну и ту же операцию над всеми разрядами машинного слова одновременно. Поэтому для работы внутри "группы" надо делать специальные функции инкапсулирующие геморрой.
а чего сложного? переводите ваше число в в нули и единицы, назначаете старший бит, от которого делаете сдвиг, в группу записываете от назначенного старшего бита до меньшего, сдвигаете, переводите опять в ту систему счисления которая нужная, предварительно соединив группу с той частью,которая до старшего бита.
Вопрос сразу такой?! Что значит вводим число и вводим число разрядов произвольно? Такого быть не может :)