Panowie, wielka prośba.
Czy mógłby ktoś wytłumaczyć jak laikowi ten kod :
int value;
..
for(int i = sizeof(value); i >= 0; --i)
cout << (value >> i & 1);
Z góry wielkie dzięki.
Wątek przeniesiony 2017-11-21 21:38 z C/C++ przez ŁF.
Panowie, wielka prośba.
Czy mógłby ktoś wytłumaczyć jak laikowi ten kod :
int value;
..
for(int i = sizeof(value); i >= 0; --i)
cout << (value >> i & 1);
Z góry wielkie dzięki.
sizeof(value)
- zwraca wielkość zmiennej w bajtach, w przypadku int zwraca 4 bajty, więc pętla przebiega od 4 do 0.
W każdym przebiegu wyświetla value
przesuniętą o i
bitów w prawo a & 1
dokonuje logicznego AND z 1, czego wynikiem jest wartość najmniej znaczącego bitu (0 lub 1), po operacji przesunięcia.
Jest tu w zasadzie jeden błąd, gdyż nie wyświetlasz każdego bitu po kolei a wyświetlasz tylko 5 (od 4 do 0) najmniej znaczących (zamiast 32 w przypadku inta).
Aby to naprawić wystarczy ze zmienisz w pętli ilość bajtów na ilość bitów (mnożąc przez 8) w początkowej wartości zmiennej i
.
cout << std::bitset<32>(value);