[ maza1 @ 10.06.2009. 09:18 ] @
Interesuje me kakva je mogucnost rada sa vecim brojevima od 8 bitnih, ako se programira u C-u? Tj. da li se aritmetika lako obavlja direktnim putem?
Ja sam do sada radio nesto malo programiranja u asembleru, ali kada je u pitanju rad sa 16bitnim ciframa oduzme mi mnogo vremena da se sporazumemo.
[ barum @ 10.06.2009. 21:19 ] @

Pogledaj
http://ww1.microchip.com/downl...eDoc/C18_User_Guide_51288j.pdf
Chapter 2

Kako misliš da li je laka aritmetika direktnim putem? Kada pišeš aritmetičke izraze u programskom jeziku c uvek moraš da paziš kog tipa će biti rezultat i da li će doći do odsecanja pri njegovom smeštanju. Recimo kada sabiraš bajt sa bajtom onda moraš jedan od njih da eksplicitno kastuješ u veći tip kako ne bi došlo do odsecanja rezultata.
[ maza1 @ 11.06.2009. 07:50 ] @
Hvala za link.
I mislio sam da nisam bio najjasniji.
Jasno mi je da moram da predvidim koliki broj mogu da dobijem i da prema tome rezervisem velicinu.
Konkretno me interesuje: zelim da pomnozim dva broja, od kojih je jedan velicine 8 bita, a drugi 16 bita, ili 16 x 16 bita. Ili da podelim broj sa necim drugim osim 2, 4, 8 i sl. Ovaj PIC koji sam ja ucio da programiram ima hardverski samo 8x8.
I onda sam ja isao po nekim sajtovima i preuzimao asemblerske rutine koje ne razumem, a koje se bave mnozenjem i deljenjem i koristio ih u svome programu. MEdjutim problem ovoga je upravo sto ne razumem ove rutine, i ne mogu da predvidim situacije kada one mozda nece dobro funkcionisati.
Takodje me interesuje da li mogu eksplicitno da se kucaju operacije tipa 317.4+2.78, ili 22.5x3.14 i sl.
PS Sad cu tek da pogledam onaj AN
[ maza1 @ 11.06.2009. 08:04 ] @
Sada kad sam pogledao ovaj app note, cini mi se da je moguce to sto me je interesovalo, pogotovo kada sam video koliki moze biti unsigned long!
[ barum @ 11.06.2009. 18:02 ] @
Citat:
maza1: Konkretno me interesuje: zelim da pomnozim dva broja, od kojih je jedan velicine 8 bita, a drugi 16 bita, ili 16 x 16 bita. Ili da podelim broj sa necim drugim osim 2, 4, 8 i sl. Ovaj PIC koji sam ja ucio da programiram ima hardverski samo 8x8.


Operacije za koje nema hardverske podrške bez problema se izvode softverski. Recimo 105 ciklusa treba za:

Code:

    int x = 113;
    int y = 3526;
    int r;
    
    r = y/x;
[ korak @ 11.06.2009. 21:27 ] @
Dobar kompajler navedeni kod prevodi kao:

r = 31;
[ barum @ 11.06.2009. 21:56 ] @
Dobar programer ne piše trivijalan kod.
[ maza1 @ 12.06.2009. 07:51 ] @
Barum, zahvaljujem na objasnjenju, upravo to mi je trebalo.
Pretpostavljam da brzina izracunavanja zavisi od kompajlera ,tj broj potrebnih ciklusa.

Citat:
korak: Dobar kompajler navedeni kod prevodi kao:

r = 31;

Korak, nije meni problem da pomnozim ili podelim 2 konstante, vec promenljive u toku procesa.
[ korak @ 12.06.2009. 17:58 ] @
De bre ljudi sto ste toliko osetljivi, valjda je ocigledno sta sam time hteo.

Nema ljutnje, pozdrav.