Kierunek przesunięcia bitowego w little endian (i dlaczego nie działa)

0
#include <iostream>

using namespace std;

int main(void)
{
    short poo = 1;
        // 1000 0000 0000 0000 lil'endian
        // 0000 0000 0000 0001 big endian
    cout << poo << endl;
    poo >> 4;
    cout << poo << endl;
    poo << 4;
    cout << poo << endl;
}

Jest taki kod, chciałem zobaczyć czy kierunek operatora przesunięcia bitowego dotyczy normalnego matematycznego zapisu wartości (big endian), co dałoby poo=16 czy zapisu tak jak w rzeczywistości bity są ułożone w pamięci (lil'endian), co dałoby 0.

Ale wynik jest taki, że nie przesuwa w ogóle i zostaje poo=1. Ktoś mi powie dlaczego? Kompilator rzuca mi warning, że przesunięcie nic nie robi bo jest -Wunused-value, ale nie mam pojęcia co to znaczy w tym kontekście.

1

A czemu nie: poo = poo >> 4;? ;)

edit: A kompilator rzuca ostrzeżenie, ponieważ ta linijka w Twoim wykonaniu nic nie robi - oblicza przesunięcie, jednak wynik tego obliczenia nie jest nigdzie przypisywany. Warto słuchać kompilatora, nie tylko w przypadku błędów.

0
poo >> 4;

Co ma na celu ta linijka? Raczej chodziło o to:

poo >>= 4;

a raczej o to:

poo <<= 4;
1

Tak jak i poo + 1 samo z siebie nic nie zmienia, tak samo działa poo >> 4 - musisz przypisać nowy wynik z powrotem do zmiennej: poo = poo >> 4;.

0

Rzeczywiście, trochę głupio się teraz czuję, dzięki za pomoc :)

2

Poza tym ten kod nie jest wrażliwy na endianę.

0
MarekR22 napisał(a):

Poza tym ten kod nie jest wrażliwy na endianę.

Już to wiem, sprawdziłem jak działa po poprawkach. Ale z Twojego posta wnioskuję, że może istnieć podobna sytuacja przy której endiana ma znaczenie dla przesunięcia bitowego?

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