Operacje bitowe / java

0

Utwórz program, który zdefiniuje zmienną typu int o dowolnej wartości i nazwie n. Następnie napisz program wyświetlający na ekranie:

  1. wartość reprezentowaną przez ostatnie 5 bitów liczby n;
  2. 1 lub 0 zależnie od wartości siódmego bitu tej zmiennej;
  3. wartości poszczególnych bajtów (począwszy od najbardziej znaczącego) z których składa się ta liczba - wynikiem powinny być 4 liczby z przedziału
    [0 - 255]
  4. wartość reprezentowaną przez dwa środkowe bajty liczby n reprezentowane jako liczba z przedziału [0, 2^{16}-1 = 65535].

Po prostu nie wiem jak się za to zabrać. Proszę o ukierunkowanie jak zacząć, czy na co zwrócić uwagę.

1

Wpierw zrób zmienną n i wypisz jej wartość. Zrobiłeś to już?

0

Tak zrobiłem, może trochę źle ująłem treść pytania.
int n = 3;
Patrząc na 1 część zadania jeżeli dobrze rozumiem mam zwrócić ostatnie 5 bitow liczby n.
W jaki sposób mam wrócić do tej postaci i zaznaczyć, że chce aby wyświetliło się tylko ostatnie 5.

2

Ja bym na twoim miejscu zaczął używać google.
Takie coś mi znalazło jak wpisałem zapytanie o zmianę inta na bity: https://www.geeksforgeeks.org/java-lang-integer-tobinarystring-method/
a takie coś jak wpisałem, że chcę ostatnie znaki: https://howtodoinjava.com/java/string/get-last-4-characters/
akurat tutaj 4 ale łatwo zgadnąć jak będzie dla 5.

2

Skoro mają to być operacje bitowe, może warto rzeczywiście je wykonać, zamiast bawić się w wysokopoziomowe obcinanie stringów?
Masz operatory & (bitwise and) i << (bitwise shift), to wszystko czego potrzebujesz.
Operator & działa jak and, tylko że zamiast wartości logicznych porównuje kolejne bity. Operator << przesuwa reprezentację bitową liczby o 1 w lewo.
W pierwszym zrób sobie maskę, czyli liczbę 0b11111. Jeśli weźmiesz n & mask, to dostaniesz tylko 5 ostatnich bitów z n - bo w mask masz przecież zera wszędzie poza 5 ostatnimi.
Jeśli chcesz 7 bit, wystarczy przesunąć 1 sześć razy w lewo, czyli n & (1<<6).
Wartość bajtów dostaniesz biorąc maskę złożoną z ośmiu jedynek. Później przesuniesz ją sobie w lewo odpowiednią ilość razy.

1

wprawdzie to nie gotowiec ale ślicznie wyjaśnione na przykładach
https://www.geeksforgeeks.org/check-whether-k-th-bit-set-not/

0

Dzięki za pomoc, zadanie zrobione.

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