Pomoc w operacjach bitowych.

0

Mam na zajęciach z programowania (java ofc) zadania dotyczące operacji bitowych. Prawdopodobnie każde z nich da się rozwiązać metodami "nietypowymi" np. robiąc same działania na stringach. Tutaj jednak chodzi o maksymalne użycie tych operacji bitowych (AND, OR, NOT, XOR). Nie chcę zostać uznany za leniwego pasożyta, proszę Was tylko o symboliczną pomoc w znalezieniu pomysłu, ewentualnie napisaniu głównego algorytmu. We wszystkich przypadkach chodzi o 32 bity.

  1. Napisać metodę, która zwraca reprezentację bitową jakiegoś danego inta. (Oczywiście Integer.toBinaryString() nie wchodzi w grę :) ).
  2. To samo, co w 1, ale bez zbędnych zer na początku (czyli w 1 zad liczba "2" będzie wyglądać 0000...10. W drugim ma być samo 10)
  3. Napisać metodę, która zamieni łańcuch zer i jedynek na liczbę dziesiętną.

Będę wdzięczny na każdą pomoc.

0

Tak wygląda implementacja Integer.toBinaryString():

static final char digits[] = {
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
    'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 
    'u', 'v', 'w', 'x', 'y', 'z'
};

public static String toBinaryString(int i)
{
    return toUnsignedString(i, 1);
}

private static String toUnsignedString(int i, int j)
{
    char ac[] = new char[32];
    int k = 32;
    int l = 1 << j;
    int i1 = l - 1;
    do
    {
        ac[--k] = digits[i & i1];
        i >>>= j;
    } while(i != 0);
    return new String(ac, k, 32 - k);
}

2 to banał.
3 to banał.

0

Zrobiłem pierwsze. Proste było.

 for(int i=0; i<32; i++){
	y=n&1;
	sb.append(y);
	n=n>>1;
}

Wszystko opierało się na tym forze. potem naturalnie zrobiłem sb.reverse(); i wszystko ładnie wygląda.

Teraz: jak wywalić te zera na początku? Jasne, mogę zrobić to narzędziami stringa, ale potrzebuję metody podobnej to tej wyżej.

0

podejrzyj sobie implementacje String.trim() i zrob to samo dla 0 zamiast " " i tylko z jednej strony :)

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