Skocz do zawartości

Program ... - Nie Rozumiem :(


MitS

Rekomendowane odpowiedzi

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

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

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

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

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

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 ... sad.gif

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 smile.gif

 

Pozdro

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
×
×
  • Dodaj nową pozycję...