[ grabber @ 09.01.2010. 23:03 ] @
Code:
int main()
{
        unsigned char a=7, b=152, c, d=131;
    c+=++b/--a;
    c=b+d;
    b=++b-(--a)*((d--)/28);
    a*=a|(d>>1);
    d=b^1<<3;
}


može li mi neko molim vas objasniti liniju po liniju ovoga koda šta i zbog čega radi? nadam se da nije problem onima koji znaju C...

hvala unaprijed
[ abitbp6 @ 09.01.2010. 23:19 ] @
Ovo je verovatno vežba iz oblasti operatora i namenjena je da proveri da li razumeš kojim redosledom se operacije izvršavaju. Dati kod je ekvivalentan sledećem:
Code:

int main()
{
    unsigned char a = 7, b = 152, c, d = 131;
    c = c + ((b + 1)/(a - 1));
    c = b + d;
    b = (b + 1) - (a - 1) * (d / 28); d + d - 1;
    a = a * (a | (d / 2));
    d = b ^ 8;
}
[ grabber @ 09.01.2010. 23:26 ] @
ok, hvala drug...

je li može još samo objašnjenje za sljedeće operatore: ^, | i << (tj >>)... ili link gdje mogu pročitati jasna objašnjenja
[ Picsel @ 10.01.2010. 10:29 ] @
http://en.wikipedia.org/wiki/Bitwise_operation

| je bitwise OR, ^ je bitwise XOR, a >> i << su aritmeticka shiftovanja u desno, odnosno u levo.
[ grabber @ 10.01.2010. 12:32 ] @
hvala, čitao sam malo, ali mi je opet nejasno, koje rezultate bi trebala izbaciti zadnja dva reda u kodu kojeg sam naveo :?
[ Picsel @ 10.01.2010. 16:43 ] @
Mrzi me da gledam sta su ti a, b i d u tom trenutku.
U svakom slucaju, da bi shvatio te operatore, moras da razumes binarni zapis brojeva.
Za primer, broj 12 i broj 10.
Broj 12 binarno zapisan je 00001100 (8 bitova jer je char).
Broj 10 binarno zapisan je 00001010 (8 bitova jer je char).

12<<1 znaci da binaran zapis pomeras ulevo za jedno mesto, odnosno on postaje 00011000 (to je broj 24).
12>>2 znaci da binaran zapis pomeras udesno za dva mesta, odnosno dobijas 00000011 (to je broj 3).

| je bitovno OR, sto znaci da se porede bitovi iste pozicije i u zavisnosti od vrednosti bitova, dobija se 0 i 1 kao rezultat na tom mestu. Za OR vazi da ako je bilo koji od bitova 1, onda ce rezultat biti 1, a ako su oba 0, onda je rezultat 0.
Za 12 i 10 to je
00001100
00001010
---------
00001110

(Prvo se porede bitovi oba broja na prvoj poziciji, pa na drugoj itd.) 00001110 je broj 14.

Sto se tice ^, sve se radi kao i kod |, jedino sto se drugacije dobijaju rezultati, odnosno ako se bitovi razlikuju, onda je resenje 1, ako su isti (0 i 0, ili 1 i 1), onda je 0.
Za 12 i 10 to je
00001100
00001010
---------
00000110

Odnosno broj 6.

Znaci 12|10 = 14
12^10=6
Sad samo to primeni na kojim god vrednostima trebas...

[ mulaz @ 10.01.2010. 17:30 ] @
Citat:
abitbp6: Ovo je verovatno vežba iz oblasti operatora i namenjena je da proveri da li razumeš kojim redosledom se operacije izvršavaju. Dati kod je ekvivalentan sledećem:
Code:

int main()
{
    unsigned char a = 7, b = 152, c, d = 131;
    c = c + ((b + 1)/(a - 1));
    c = b + d;
    b = (b + 1) - (a - 1) * (d / 28); d + d - 1;
    a = a * (a | (d / 2));
    d = b ^ 8;
}


Nije!!

zaboravio si da si i promenjive menjaju
Ako imas:
a=5;
x=10-(--a);
"x" je naravno 6, a i "a" je sada 4.

razlika izmedju "--a" i "a++", je da prvi prvo smanji "a" za 1, i onda upotrebi u racunu, a drugi da upotrebi sadasji "a" u racunu, i tek posle uvecava ga za 1.

[Ovu poruku je menjao mulaz dana 10.01.2010. u 18:41 GMT+1]
[ vdes @ 23.01.2010. 01:19 ] @
Pozdrav svima nova sam na sajtu i apsolutni pocetnik u programiranju pa ako nekome nije problem da mi objasni sta rade ove for petlje jer bas nista ne razumijem.Unaprijed hvala


[Ovu poruku je menjao vdes dana 24.01.2010. u 13:52 GMT+1]
[ Picsel @ 23.01.2010. 09:27 ] @
Code:
for(i=1;i<=999;i++)
niz[i]=i+1;


Puni niz sa brojevima od 2 do 1000.

Code:
     for(i=1;i<=999;i++)
     {
      if(niz[i]!=0)
     {
      for(j=(i+1);j<=999;j++)
     {
      if(niz[j]!=0)
     {
      if((niz[j]%niz[i])==0)
        niz[j]=0;

     }}}}


Prolazi kroz ceo niz i za svaki clan sa indeksom i koji je razlicit od 0, prolazi kroz ostale clanove niza koji su veci od njega i za sve te clanove (indeks j) koji su razliciti od 0, proverava da li su deljivi sa clanom sa indeksom i, i ukoliko jesu, "brise" ih tako sto na njihovo mesto stavlja 0.

Na kraju ispisuje sve te brojeve koji su razliciti od 0.

A sta je to zapravo, pa, Eratostenovo sito. To jest, ovaj tvoj program odredjuje sve proste brojeve od 2 do 1000, a menjanjem vrednosti clana niza na 0 oznacava da je broj u nizu precrtan.
[ vdes @ 23.01.2010. 13:18 ] @
Hvala puno na odgovoru.