Brak lvalue w wyrażeniu?

0

Kod jest prosty:

unsigned long eax;

.
.
.
trochę kodu

i ma być:

(signed long)eax >>= 5;
ale wyrzuca lvalue required as left operand of assignment
(signed long)eax = eax >> 5; też nie akceptuje

dodam, że bez rzutowania przepuszcza (tylko nie wiem czy wynik przesunięcia da ten sam wynik, ale chyba nie)

To co rzutowanie przy przesunięciu bitowym jest niedozwolone? Czemu?

Środowisko C::B, kompilator GNU GCC (mingw32-g++.exe), system 32bitowy

1

Wynikiem takiego rzutowania nowa wartość, która jest rvalue. Równie dobrze mógłbyś napisać 42 = eax >> 5

0

To co, inna zmienna i najpierw przesuwamy eax a potem rzutujemy na inną?

0

Przede wszystkim: co chcesz osiągnąć? Dość wyjątkowo (signed long)eax >>= 5; ma zupełnie inne znaczenie niż (signed long)eax = eax >> 5;. Chcesz przesunąć bitowo eax zachowując znak?

0

Nie za bardzo wiadomo, bo to jest czyjś kod znaleziony w necie, który chciałem przetestować i teraz nie wiem jakiego wyniku oczekiwał autor.
Ale zrozumiałem na czym polega problem i to mi wystarcza :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1