Wykonaj przesunięcie logiczne za pomocą operatora przesunięcia arytmetycznego w C [duplikat]

To pytanie ma już tutaj odpowiedź:

Implementacja logicznego prawego przesunięcia w C 8 odpowiedzi

W tej chwili czytam książkęSystemy komputerowe: perspektywa programisty.

Jeden z problemów w książce mówi o logicznym przesunięciu w prawo na podpisanej liczbie całkowitej. Nie wiem, jak zacząć.

Oto aktualne pytanie z książki:

Wpisz kod dla następujących funkcji C.

Funkcjonowaćsrl wykonuje logiczne przesunięcie w prawo używając arytmetycznego prawego przesunięcia (podanego przez wartośćxsra), a następnie inne operacje nie obejmujące prawych zmian lub podziału.

Funkcjonowaćsra wykonuje arytmetyczne przesunięcie w prawo za pomocą logicznego przesunięcia w prawo (podane przez wartośćxsrl), a następnie inne operacje nie obejmujące prawych zmian lub podziału.

Możesz użyć obliczeń8*sizeof(int) określićw, liczba bitów w typie danychint. Kwota przesunięciak może wahać się od0 dow − 1.

unsigned srl(unsigned x, int k) {
    /* Perform shift arithmetically */
    unsigned xsra = (int) x >> k;
    .
    .
    .
}

int sra(int x, int k) {
    /* Perform shift logically */
    int xsrl = (unsigned) x >> k; 
    .
    .
    .
}

Mam nadzieję, że teraz rozumiesz pytanie.

questionAnswers(2)

yourAnswerToTheQuestion