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 odpowiedziW 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.