Witam, w podręczniku do C, który jest tutaj: https://pl.wikibooks.org/wiki/C/Operatory#Operacje_bitowe jest napisane:
Przesunięcie w prawo oznacza przemieszczenie wszystkich bitów argumentu w prawo o określoną liczbę miejsc oraz powielenie najstarszego bitu na skrajnej lewej pozycji.
Jednak prosty kod w C++ daje zupełnie inne wyniki.
#include<iostream>
#include <bitset>
using namespace std;
int main()
{
unsigned char x = 255;
cout<<bitset<8>(x)<<"\n";
cout<<bitset<8>(x<<1)<<"\n";
cout<<bitset<8>(x>>1)<<"\n";
return 0;
}
Wyniki:
11111111
11111110
01111111
A zgodnie z tym co było napisane wynikiem powinno być:
11111111
11111110
11111111
Więc jak to jest z tymi przesunięciami? Ich wynik jest zależny od platformy sprzętowej czy w podręczniku jest błąd?