Zamiana na kod binarny

0

Witam!

Nie bardzo wiem czy taki temat już był, bo nawet nie bardzo wiem jak go szukać więc pytam teraz (jeżeli był to prosze o jakieś przekierowanie i przepraszam za spamowanie):

Mam sobie chara, który jak wiadomo jest zapisany przy pomocy ośmiu 0 lub 1. I tak się zastanawiam jak tu zrobić żeby taki znak został zamieniony na tablicę boolean (osiem komórek) tak, żeby odpowiadała ona temu konkretnemu znakowi (i odwrotnie). Podobno w C++ można użyć takiej konstrukcji (podaję jako przykład, żeby nie było wątpliwości o co mi chodzi):

for(int i=0; i<8; i++)
        {       
                zakodowanyZnak[i]=(znak&0x80);
                znak=znak<<1;
        } 

Z góry wielkie dzięki

0

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)

  1. 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
  2. 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

0

Dzięki wielkie, w sumie działa, tylko jest jeden kłopot. Wyświetla mi napisy true i false zamiast 0 i 1. Jakiś pomysł, jak to zmienić? :P

0

Widzę, że to są Twoje początki w programowaniu.

Zmień typ tablicy na cokolwiek, co umożliwi Ci przechowywanie jedynek i zer, (int, char, String, do wyboru do koloru) i zapisuj zamiast true/false jedynki i zera.

0

NO tak, wygląda jak wyglądać miało, ale klopot w tym, że ja muszę, jeszcze pomnożyć przez macierz 0-1. I można pomnożyć na tych wszystkich true/false a potem przerobić na inta? Albo może jakiś inny pomysł? :)

0

Po jakiego grzyba tworzysz tablicę wartości logicznych (boolean), skoro potrzebujesz wartości całkowite ?

0

Podaj dokładnie, przez jaką macierz Ty chcesz to mnożyć. Powiedz też po co chcesz to robić ?

0

Jednak sobie poradziłem :) Teraz mam jeszcze inny kłopot, ale to za dużo by pisać :PP

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