Zamiana sąsiadujących bitów

Zadanie 11 z 17 · rozdział 16Trudność: 1 z 3bitwisemaskiswap bits

Treść zadania

Wczytaj liczbę naturalną n. Zamień miejscami każdą parę sąsiadujących bitów jej zapisu binarnego (bity numerujemy od 0 — najmłodszy, czyli skrajnie prawy):

  • bit 0 z bitem 1,
  • bit 2 z bitem 3,
  • bit 4 z bitem 5,
  • itd.

Wypisz otrzymaną liczbę w systemie dziesiętnym.

Dane wejściowe

  • 1. linia: n

Dane wyjściowe

Jedna liczba naturalna: wynik po zamianie bitów.

Ograniczenia

  • $0 \le n \le 10^9$

Uwagi

  • Brakujące bity na początku zapisu traktujemy jak zera. Na przykład 4 to 100: bit 2 (jedynka) zamienia się z bitem 3 (zerem), więc wynik to 1000, czyli 8.
  • Maska 0x55555555 (…0101) wybiera bity o numerach parzystych, a 0xAAAAAAAA (…1010) — o numerach nieparzystych.

Przykład

Wejście
9131
Wyjście
4951

9131 to binarnie 10001110101011, a po zamianie par bitów otrzymujemy 01001101010111, czyli 4951.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 16

Zadania w tym rozdziale ćwiczą zamianę liczb między systemami liczbowymi oraz operatory bitowe: & (AND), | (OR), ^ (XOR), ~ (NOT) i przesunięcia <<, >>.
Każde zadanie (oraz każdy podpunkt w zadaniach wieloczęściowych) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).

Konwencje wspólne:

  • Każda liczba na wejściu jest w osobnej linii, w kolejności podanej w sekcji Wejście.
  • Liczby na wejściu są nieujemne (0 jest dozwolone), chyba że zadanie wprost mówi inaczej.
  • Zapis binarny wypisuj jako ciąg znaków 0 i 1 **bez spacji, bez prefiksu 0b i bez zer wiodących**; zapis binarny liczby 0 to 0.
  • Dla systemów o podstawie większej niż 10 używaj cyfr 0–9 oraz wielkich liter A–Z.
  • Jeśli zadanie mówi „nie wypisuj nic” — program nie wypisuje nawet pustej linii.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
13
Oczekiwane wyjście
14

Test 2

Nie uruchomiono
Wejście
2
Oczekiwane wyjście
1

Test 3

Nie uruchomiono
Wejście
0
Oczekiwane wyjście
0

Test 4

Nie uruchomiono
Wejście
4
Oczekiwane wyjście
8

Test 5

Nie uruchomiono
Wejście
1
Oczekiwane wyjście
2

Test 6

Nie uruchomiono
Wejście
255
Oczekiwane wyjście
255

Test 7

Nie uruchomiono
Wejście
170
Oczekiwane wyjście
85
Uruchom z własnymi danymi