Proponuję zajrzeć na
anglojęzyczną wersję tej strony i zapewne wszystko się wyjaśni. Mam na myśli różnicę pomiędzy
unsigned (logical) shift right oraz
signed (arithmetic) shift right (to, o czym pisał wcześniej kolega Mirek). Niedopatrzeniem ze strony autora polskiego artykułu na Wikibooks jest to, że nie uwzględnił tych dwóch rodzajów przesunięć.
W języku C przesunięcie jest zapisywane zawsze tak samo, a rodzaj przesunięcia jest dobrany przez kompilator i zależny od typu danych, na których wykonywana jest operacja. Natomiast w ASM są to różne instrukcje (w AVR assembler to
LSR i
ASR) i to programista musi dobrać odpowiednią, w zależności od tego, co chce osiągnąć.
_________________
AVR-GCC - dane w pamięci FLASH