Битовые операции, циклический сдвиг - C (СИ)
Формулировка задачи:
в принципе идея понятна, двигаемся (в моем примере против часовой) битами в лево, те что пропадают слева, появляются справо.
однако никак не работает корректно, видно что число упирается в 32 разряда единиц и встает, хотя вроде бы функция правильна прошу совета
int main()
{
int x = 43775; //1010 1010 1111 1111
int n = 2;
for(int i = 0; i<12; i++){
printf("%u\n", x = rightrot(x,n));
}
return 0;
}
int rightrot (int x, int n)
{
//int pt1,pt2; <===== разложение операции ретерна
//pt1 = x<<n;
//pt2 = x>>(sizeof(x)*8 - n);
//pt1|pt2;
return (x<<n)|x>>(sizeof(x)*8 - n);
}Решение задачи: «Битовые операции, циклический сдвиг»
textual
Листинг программы
int rightrot (unsigned x, int n)