mnie udało się wyklikać cos takiego:
public static boolean[] convertCharToBooleanArray( char ch ) {
boolean[] array = new boolean[8];
for ( int i = 0; i < array.length; i++ ) {
// if( ( ch & (128 >> i)) != 0 ) {
// array[i] = true;
// } else {
// array[i] = false;
// }
// lub za pomocą operatora warunkowego, oba rozwiązania są poprawne
array[i] = ( ch & (128 >> i)) != 0 ? true : false;
}
return array;
}
Na pewno najciekawszym fragmentem dla Ciebie jest:
( ch & (128 >> i)) != 0
Otóż zastosowałem przesuniecie bitowe liczby 128 (jedynka na ósmym, najbardizej znaczącym bicie) oraz operacje logiczną AND, która jak wiadomo zwraca true tylko i wyłącznie wtedy, gdy obie wartosci lewa i prawa będą prawdą (czyli jedynkami).
Kolejne obroty pętli dla parametru 'a' (czyli 97 po rzutowaniu na int)
- i == 0:
128 przesuwane o 0 bitów w prawo == 128, czyli operacja AND porównyje wartosci na ósmym bicie
w obu zmiennych. "ch" ma tam zero (bo to bit znaku, liczby ujemne mają w tym miejscu jedynkę).
w rezultacie dostajemy liczbę równą zero
- i == 1
128 przesunięte o 1 bit w prawo, teraz ma wartość 64 (jedynka na siódmym bicie). literka a (97)
również w tym miejscu ma jedynke, więc wynikiem będzie oczywiście 64 (2 do potęgi 6), skoro wynik jest więjszy od zera, możemy do tablicy wpisać jedynkę.
Kolejne adekwatnie do dwóch pierwszych, aby lepiej zrozumieć temat poczytaj o operatorach bitowych. Powodzenia