[ 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.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.