KWALIFIKACJA ELM5 - TEST WIEDZY NR 4

PYTANIE NR 25.
Rozważ następujący fragment kodu:
int a = 5;
int b = a << 2;
Jaka jest wartość zmiennej 'b' po wykonaniu powyższego kodu?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Operator przesunięcia w lewo (

Pełne wyjaśnienie:

W kodzie:

int a = 5;
int b = a << 2;

operator << oznacza przesunięcie bitowe w lewo. Działa to tak, że zapis binarny liczby jest przesuwany o wskazaną liczbę pozycji, a z prawej strony dopisywane są zera.

Dla a = 5 mamy zapis binarny: 0101 (pomijając wiodące zera). Przesunięcie o 2 bity w lewo daje: 0101 00. To jest równoważne mnożeniu przez 2^2, czyli:

b = a * 2^2 = 5 * 4 = 20

Dlatego poprawna odpowiedź to: 20.

Dlaczego pozostałe odpowiedzi są błędne?

  • 10 – to wynik pomylenia przesunięcia o 2 bity z mnożeniem przez 2 (czyli przesunięciem o 1 bit) albo zbyt "intuicyjnym" skojarzeniem liczby 2 z podwojeniem.
  • 15 – może wynikać z błędnego dodawania (np. 5 + 10) albo z mylenia operacji bitowych z innymi operatorami; przesunięcie w lewo nie polega na dodawaniu.
  • 25 – to typowa pomyłka "5 razy 5", czyli zastąpienie reguły 2^n (potęga dwójki) przez n jako zwykły mnożnik.

Wskazówka egzaminacyjna: zapamiętaj prostą regułę: dla liczb niepowodujących przepełnienia, x << n oznacza x · 2^n. To jest szczególnie przydatne w elektronice i systemach wbudowanych przy pracy na bitach i rejestrach.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Operator << przesuwa bity liczby w lewo o podaną liczbę pozycji, dopisując z prawej strony zera. W typowych zastosowaniach (bez przepełnienia) odpowiada to mnożeniu przez 2^n, gdzie n to liczba przesunięć.
Najprościej użyć reguły: a << n = a · 2^n (gdy nie ma przepełnienia). Dla a=5 i n=2: 5 · 4 = 20. Alternatywnie: 5 to binarnie 0101, po przesunięciu o 2 otrzymasz 010100.
W zapisie binarnym każda kolejna pozycja w lewo ma wagę dwa razy większą. Przesuwając bity o n miejsc, zwiększasz wagę wszystkich jedynek 2^n razy. Dlatego (bez przepełnienia) jest to równoważne mnożeniu przez 2^n.
Nie zawsze. W C++ ten sam zapis << może oznaczać przesunięcie bitowe albo operator strumienia (np. cout << x). Kontekst typów rozstrzyga znaczenie. W zadaniach z int zwykle chodzi o przesunięcie bitowe.
Najczęstsze to: mylenie przesunięcia o 2 bity z mnożeniem przez 2, traktowanie przesunięć jak działań na zapisie dziesiętnym oraz ignorowanie przepełnień. W systemach wbudowanych warto też uważać na typy ze znakiem i kolejność wykonywania działań.
Tak, jeśli dojdzie do przepełnienia zakresu typu lub gdy operujesz na typach ze znakiem w sposób zależny od implementacji. W praktyce egzaminacyjnej dla małych liczb (jak 5) i typu int przyjmuje się standardowy wynik 20.
Przesunięcia i operatory bitowe są kluczowe przy pracy z rejestrami mikrokontrolerów: ustawianiu bitów konfiguracji, flag, masek i pól bitowych. Ułatwiają też pakowanie danych do ramek komunikacyjnych oraz szybkie przeliczenia powiązane z podziałem przez 2 lub mnożeniem przez 2.
W lewo (<<) dopisywane są zera. W prawo (>>) sytuacja zależy od typu: dla bez znaku zwykle dopisuje się zera, a dla ze znakiem często kopiowany jest bit znaku (tzw. przesunięcie arytmetyczne). Dlatego w prawo trzeba uważać bardziej.
Liczba 5 to binarnie 0101 (lub 101 bez wiodących zer). Po przesunięciu o 2 w lewo otrzymujesz 010100. To odpowiada wartości dziesiętnej 20, bo przesunięcie o 2 bity to mnożenie przez 4.
Ćwicz trzy rzeczy: (1) szybkie przejście dziesiętne↔binarne, (2) reguły masek (AND/OR/XOR) i przesunięć (x·2^n), (3) typowe zastosowania w rejestrach. Rozwiązuj krótkie zadania z flagami i polami bitowymi, bo to najczęstszy schemat.
info

To pytanie poprawnie rozwiązuje 69% zdających egzamin. średnie

Według specjalistów z branży: "Operator przesunięcia w lewo ("

Źródła:

  • cppreference.com: Left shift and right shift operators (C) – https://en.cppreference.com/w/c/language/operator_arithmetic (sekcja o shift) - accessed 2026-02-26
  • cppreference.com: Bitwise operators (C++) / operator<< (shift) – https://en.cppreference.com/w/cpp/language/operator_arithmetic (sekcja o przesunięciach) - accessed 2026-02-26

Materiały:

  • Dokumentacja języka C/C++ dotycząca operatorów bitowych (materiały kursowe)
  • Artykuły referencyjne o operatorach bitowych i reprezentacji liczb (np. cppreference)
  • Podstawy systemów liczbowych i algebry Boole'a dla elektroniki cyfrowej

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego