Cześć mam problem z zadaniem dotyczącym cyklicznego przesunięcia bitów na wejście podajemy liczbę na której będziemy dokonywać przesunięcia i ilość bitów o ile daną liczbę chcemy przesunąć. Na tyle na ile umiem postarałem się wykonać jakaś analizę i wyszło mi ze w miejscu gdzie powinny wychodzić zera z lewej strony przy przesunięciu w prawo wychodzą nieoczekiwane jedynki dlaczego tak się dzieje? I co mógłbym poprawić aby kod działał?
Zakładając że dla liczby -10 przesuniętej o 3 w prawo wychodzi: -536870914
int bitwise_rotation(int value, int k) {
//liczba -10 = 1111 1111 1111 1111 1111 1111 1111 0110
//zadładamy zakładamy przesunięcie o 3 miejsca w prawo
//napierw w lewo o (bit_size(vvalue) - k) aby ustawić jakby na wartości końcowej stronne bitów lewą
int tmp1, tmp2, result, size = sizeof(int) * 8;
tmp1 = value << (size - k);
//tmp1 = 1100 0000 0000 0000 0000 0000 0000 0000
//teraz w prawo do zmienniej tmp2(o ilośc przeuwanych bitów niejako usunąc te po prawej)
tmp2 = value >> k;
/*
Dlaczego 1111 1111 1111 1111 1111 1111 1111 1110
a nie 0001 1111 1111 1111 1111 1111 1111 1110
*/
result = (tmp1 bitor tmp2);
return result;
}
Z góry dzięki za wszelkie odpowiedzi