[ cokoladna_bananica @ 11.03.2014. 01:00 ] @
Zdravo.Treba mi pomoc oko nekih zadataka u C-u,konkretno zadatak 10<<3-10>>2 kao i objasnjenje kako ste dosli do resenja?Zbunjuje me kako -7 da predstavim kao binaran broj?I kako onda dalje?
A drugo pitanje je u vezi interpoliranog pretrazivanja(ako moze i neko objasnjenje na koji nacin se odvija interpolirano pretrazivanje),da li se moze primeniti na niz brojeva 101,203,305,407,405,313,210,102?
[ X Files @ 11.03.2014. 12:12 ] @
Citat:

Treba mi pomoc oko nekih zadataka u C-u,konkretno zadatak 10<<3-10>>2 kao i objasnjenje kako ste dosli do resenja?

Prvo treba utvrditi da li treba uraditi ovo (10<<3)-(10>>2), ili ovo 10<<(3-10)>>2, što je ekvivalentno sa 10<<3-10>>2.

Ako se radi o prvom:

Fizički gledano, izraz 10<<3 označava da cifre broja 10, zapisane u binarnom obliku, treba pomeriti za TRI (3) mesta ULEVO (<<), dopisivanjem nula sa desne strane.

Dakle, početni broj:
10 (Dec) = 1010 (Bin)

I pomeranje:
1010 (Bin), sada je to broj 10100 (20)
II pomeranje:
10100 (Bin), sada je to broj 101000 (40)
III pomeranje:
101000 (Bin), sada je to broj 1010000 (80)

Logički gledano, broj 10 si pomnožio sa 23, tj sa 8. Zapravo, svako pomeranje ulevo je množenje broja sa 2.

Pomeranje udesno je zapravo deljenje sa 2. Isti je princip pomeranja, samo udesno. Ipak, treba voditi računa da se ne izgubi "bit najmanje težine", tj onaj prvi bit sa desne strane, ako je broj neparan. Ovo je slučaj i u tvom primeru, kod drugog pomeranja.

Ako se radi o drugom:
Citat:

Zbunjuje me kako -7 da predstavim kao binaran broj?I kako onda dalje?

Negativni brojevi se ne mogu zapisati na očekivani način u binarnom svetu, jer imaš na raspolaganju samo 0 i 1. Nemaš znak "-". Kako će se reprezentovati negativni brojevi, stvar je neke konvencije (dogovora). Recimo da se "bit najviše težine" rezerviše da označava da i je broj pozitivan ili negativan. Time automatski gubiš "kapacitet" za smeštanje vrednosti, ali šta je tu je.

Ima i drugačijih načina, verovatno je tvoj slučaj:
http://sr.wikipedia.org/wiki/Komplement_dvojke
Tvoj -7 se po ovome transformiše u ...11111001.

Kakvi će rezultati biti, zavisi od "veličine" izabranog tipa.


Citat:

A drugo pitanje je u vezi interpoliranog pretrazivanja(ako moze i neko objasnjenje na koji nacin se odvija interpolirano pretrazivanje),da li se moze primeniti na niz brojeva 101,203,305,407,405,313,210,102?

Čim postoji pravilo - može.
[ glorius @ 11.03.2014. 12:28 ] @
Moje misljenje je da bi trebalo uraditi:

Citat:
Prvo treba utvrditi da li treba uraditi ovo (10<<3)-(10>>2)


na ovaj nacin zato sto shift operatori rade sa pozitivnim brojevima (compiler daje samo warning, mozda bi trebao biti malo stroziji), posto je - jaci od << i >>.
[ djoka_l @ 11.03.2014. 13:09 ] @
Kompajler daje upozorenje, ali se program kompajlira i dobija se odgovor da je rezultat 0.

Dakle, izraz koji si ti napisao - 10<<3-10>>2 se izračunava kao ( ( 10 ) << ( 3 - 10 ) ) >> 2 i rezultat je 0.
Znači, prvo se izračunava izraz 3-10 i rezultat je -7. Ovaj rezultat se pamti kao drugi komplement, odnosno kao 2^32 - 7 ili 2^64 - 7 u zavisnosti da li se koriste 32-bitni ili 64-bitni itegeri. Iako je rezultat integer, za potrebe shift operacije taj broj se tretira kao unsigned, a svaki levi šift koji je veći ili jednak 32 ili 64 u zavisnosti od dužine integera će kao rezultat dati 0 (zato što je najmanji integer veći od 0 jednak 1, a kada se on šiftuje 32 ili 64 mesta u levo, "ispada" iz opsega brojeva koji se mogu prikazati u integer tipu, pa postaje 0). Kada se 0 šiftuje u desno, bez obzira koliko cifara, opet je rezultat 0.

U slučaju da si hteo da izračunaš (10<<3)-(10>>2), rezultat je 78, zato što je 10 << 3 jednako 80, a 10 >> 2 je 2, pa je 80 - 2 = 78.