Zamiana ciagu bitów na pojedyncze

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
eseq

Zamiana ciagu bitów na pojedyncze

Post autor: eseq » 19 lut 2006, 13:20

Witam
Jak zrealizowac zamiane ciagu bitów np. 1011, aby je rozłazyc na pojedyncze 1,0,1.,1

___
I I- 1
1011 - I- 0
I I - 1
I___I - 1

to ma byc cos takiego

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 19 lut 2006, 14:54

Twój "rysunek" jest dla mnie nieczytelny. Może przynajmniej jakiś Paint?
Prawdopodobnie wystarczą Ci po prostu rejestry przesówne. Jeśli chcesz zamienić ciąg pojawiających się w takt zegara wartości na równolegle wyprowadzone bity potrzebny będzie rejestr szeregowo-równoległy.

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Re: Zamiana ciagu bitów na pojedyncze

Post autor: gaweł » 20 lut 2006, 2:13

eseq pisze:Witam
Jak zrealizowac zamiane ciagu bitów np. 1011, aby je rozłazyc na pojedyncze 1,0,1.,1

___
I I- 1
1011 - I- 0
I I - 1
I___I - 1

to ma byc cos takiego
Nie napisałeś jaki to procek i w czym programujesz, więc rozważania są typu asemblerowego a procek jest nieistotny.
Rozwiązań jest dużo. Najprostszym jest rozwiązanie następujące:
1. wpis danych do rejestru
2. przesunąć zawartość rejestru w lewo lub w prawo (zależy czy chces mieć te bity od lewej czy od prawej strony) z zapamiętaniem "traconego" bitu we wstaźniku C (każdy proc ma taką instrukcję),
3. jeżeli wskaźnik jest ustawiony, to była jedynaka, jeżeli nie, to było zero (testuje się to instrukcją skoku warunkowego w zależności od stanu wskaźnika C- to też ma każdy procek)
4. do obróbki następnego bitu wracasz do punktu 2. (i tak 8 razy)

Kapitan_Rzbik
-
Posty: 97
Rejestracja: 20 gru 2005, 10:52

Post autor: Kapitan_Rzbik » 21 lut 2006, 13:14

W C bedzie to tak:

Kod: Zaznacz cały

const int N=8; //liczba bitow do odczytania
int i; //licznik
int bit_f; //liczba z interesujacymi nas bitami
int bit_t[N]; //tablica bitow

for(i=0;i<N;i++)
   bit_tab[i]=(bit_f>>i) & 0x01;
Pozniej wystarczy odczytac kazdy bit z tablicy, np bit zerowy czytamy z zerowej komorki tablicy.

ODPOWIEDZ