Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Operacje na bitach w C

zybi
-
-
Posty:25
Rejestracja:24 sie 2004, o 14:40
Operacje na bitach w C

Postautor: zybi » 4 kwie 2006, o 09:59

Witam,
Mam pytanie dotyczące programowania w C. Nie umiem za bardzo w nim programować i stąd moja prośba:
Potrzebny mi jest krótki fragment kodu w C, który przekształci 3 bajty danych w 2 bajty wg zasady: najstarsze 3 bity pierwszego bajtu łączy z najstarszymi 3 bitami drugiego bajtu oraz 3 bajtu. Najlepiej to przedstawi schemat:
1 bajt a7a6a5a4a3a2a1a0
2 bajt b7b6b5b4b3b2b1b0
3 bajt c7c6c5c4c3c2c1c0

przekształci w 2 bajty:

1 bajt c1c0b2b1b0a2a1a0
2 bajt xxxxxxxxxxxxxxc2

x - zera

Myślę, że to nie jest trudne, a ja nie znam sie na operacjach na bitach w C.
Dzieki za pomoc.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 4 kwie 2006, o 13:11

ale namieszales z tym 1 bajt, 2 bajt... *) i jak mam Ci teraz odpowiedzeic ?? (zeby to bylo logiczne).

Przyjmijmy ze Bz1, Bz2, Bz3 to bajty zrodlowe (te z ktorych chcesz obliczac). Zas BL i BH to bajty wyniku.

Kod: Zaznacz cały

BL = (Bz1 & 0x07) + ((Bz2 & 0x07) << 3) + (Bz3 << 6); BH = (Bz3 & 0x04) >> 2;
dlaczego 0x07 ?? bo to 00000111.


*) No chyba ze chciales nadpisac bajt1 wynikiem... wowczas smialo mozesz zamienic BL na Bz1 ...

zybi
-
-
Posty:25
Rejestracja:24 sie 2004, o 14:40

Postautor: zybi » 4 kwie 2006, o 17:54

Dokładnie o to mi chodziło. I rzeczywiście to proste. Wielkie dzieki.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości