MitS Napisano Październik 16, 2005 Zgłoszenie Share Napisano Październik 16, 2005 Kurcze ... mam problem ze zrozumieniem programu ... O to on: #include <iostream> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { char tab[]={'M','I','T','E','K'}; int tabj[8]; int i, j; for(i = 0; i < 5; i++) for(j = 0; j < 8; j++) { tabj[j] = ((((int)tab[i]) >> (7-j))%2); cout << tabj[j]; } cout << endl << endl; return 0; } i tak ogólnie to wiem jak działa, umiem stosować pętle (choć w nie każdym wypadku :/) I tak nie wiem dlaczego to jest tak: for(i = 0; i < 5; i++) for(j = 0; j < 8; j++) i jak to działa: tabj[j] = ((((int)tab) >> (7-j))%2); Prosze o pomoc w wytłumaczeniu tego kawałka kodu ... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
przemk Napisano Październik 16, 2005 Zgłoszenie Share Napisano Październik 16, 2005 I tak nie wiem dlaczego to jest tak: for(i = 0; i < 5; i++) for(j = 0; j < 8; j++) poczatek petli for: podstaw za i wartosc 0, jesli i jest mniejsze od 5 wykonaj ciag instrukcji, powieksz i o 1. i++ jest rownowazne i=i+1 tabj[j] = ((((int)tab) >> (7-j))%2); a to juz mniej dokladnie: w miejsce tablicy tabj o indeksie j podstaw skonwertowana do integera wartosc z tablicy tab o indeksie i. nie pamietam czym jest operacja >> w c++ Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
MitS Napisano Październik 16, 2005 Autor Zgłoszenie Share Napisano Październik 16, 2005 To znaczy ja wiem jak jest zbudowana pętla for i co do niej się podstawia, tylko mi chodziło o to dlaczego w tym progrpamie są zawarte te dwie pętle. Następnie znaczek >> oznacza przesunięcie bitowe w prawo i tabj[j] = ((((int)tab) >> (7-j))%2); ten zapis ja wiem co on oznacza tylko nie wiem dlaczego on tu jest czyli dlaczego jest w tym wypadku przesunięcie bitowe, dlaczego jest (7-j))%2 itp. Same oznaczenia i tłumaczenia prostych rzeczy ja rozumiem tylko chodzi mi o ten konkrteny przypadek. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Adi1981 Napisano Październik 16, 2005 Zgłoszenie Share Napisano Październik 16, 2005 to jest indexowanie po tablicy. najpierw wykonuje sie raz petla for(i = 0; i < 5; i++) (pierwszy wiersz tabeli) a nastepnie po wykonaniu sie tej petli raz (i == 0) zostaje wykonana 8 razy petla for(j = 0; j < 8; j++) (8 kolumn pierwszego wiersza). Po ostatnim wykonaniu petli z "j" wykonuje sie drugi raz petla z "i", tym razem i == 1 , po czym ponownie 8 razy petla z "j". w ten sposob powstaje tablica z 40 polami (5 wierszy x 8 kolumn) nie wiem dokladnie na jakiej zasadzie dziala instrukcja w petli, ale odpowiada ona za konwersje wartosci hex na bin. mowiac po ludzku kazda litera z tabeli {'M','I','T','E','K'} jest przedstawiona jako wartosc hex. funkcja w petli natomiast konwertuje ta wartosc na 8-bitowe slowo (ciag 0 i 1). Stad powstaje 5 wierszy z 8bitowymi slowami odpowiadajacymi kolejnym literom: M 01001101 I 01001001 T 01010100 E 01000101 K 01001011 samo %2 to dzielenie modulo 2, a wiec wynikiem tego dzielenia jest reszta z dzielenia przez 2 (0 badz 1). np (7-j)%2 dla j==0 ==> (7-0)/2 = 3 i 1 reszty j==1 ==> (7-1)/2 = 3 i 0 reszty itd.. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
MitS Napisano Październik 16, 2005 Autor Zgłoszenie Share Napisano Październik 16, 2005 ok już mniej wiecej załapałem tylko jeszcze dwa pytania: 1. j==0 ==> (7-0)/2 = 3 i 1 reszty czemu tam jest 7 ??? Nie powinno być 8 ??? 2. Jak na kartce papieru policzyć że 01001101 = M ???? i odwrotnie ??? Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Margolcia Napisano Październik 17, 2005 Zgłoszenie Share Napisano Październik 17, 2005 hmm (oczywiście mogę się mylić), ale wydaje mi się, że ma to związek z tym,że tablica indeksowana jest od 0 maksymalnie do 7. p.s.jesli się mylę, to sorry.ale pierwsza myśl mi się taka nasunęła Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
MitS Napisano Październik 17, 2005 Autor Zgłoszenie Share Napisano Październik 17, 2005 ok i już ostatnie pytanko ... czemu jest przesuniecie bitowe w prawo ??? Pozdrawiam i dizięki za odpowiedzi Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
montresol Napisano Październik 18, 2005 Zgłoszenie Share Napisano Październik 18, 2005 czemu jest przesuniecie bitowe w prawo ??? A rozumiesz juz jak sie konwertuje bin na dec i odwrotnie (pytasz o to w watku)? Zauwaz: 25 >> 0 = 25 / 2^0 = 25 [25 to binarnie 11001] 25 >> 1 = 25 / 2^1 = 12 [1100] 25 >> 2 = 25 / 2^2 = 6 [110] 25 >> 3 = 25 / 2^3 = 3 [11] 25 >> 4 = 25 / 2^4 = 1 [1] Jak widzisz przesuniecie bitowe w prawo zastepuje dzielenie przez 2 podniesione do odpowiedniej potegi. Petelka z Twojego programu to wlasnie robi - dzieli konwertowana liczbe przez kolejne potegi liczby 2. Teraz wybieramy tylko potegi liczby 2 zwiazane z nieparzystymi ilorazami (do tego jest % 2 w programie). Te ilorazy to 1, 3, 25 a odpowiednie liczby to: 16 = 10000 8 = 01000 1 = 00001 + -------------- 25 = 11001 Mam nadzieje, ze pomoglem. Pozdrawiam, montresol Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
MitS Napisano Październik 18, 2005 Autor Zgłoszenie Share Napisano Październik 18, 2005 Ok to z kumałem troche tylko zostaje ta niby błachostka ręcznej zamiany literki M na binaria i odwrotnie. Wiecie ja umiem zamienić z systemu dwójkowego na czwórkowy, ósemkowy, dziesiętny, szesnastkowy i odwrtoeni z szesnastkowego na binarny itd. ale nie wiem jak litery typu 'M', 'I' itd. zamienić na binaria ... ty mi owszem wytłumaczyłeś o przesunięciu bitowym itd. ale dałeś przykład liczby 25 a czy ta liczba jest literką 'M' ??? Jak to skumam to będzie dobrze Pozdro Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
neo_fox Napisano Październik 18, 2005 Zgłoszenie Share Napisano Październik 18, 2005 jak sądze 25 to był tylko przykład. Wszystkie znaki są kodowane w kodzie ASCII. Poczytaj sobie w wikipedi Ewentualnie jeszcze tutaj Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
MitS Napisano Październik 18, 2005 Autor Zgłoszenie Share Napisano Październik 18, 2005 Dzięki już skumałem Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się