přetečení int v C arduino

Jan Waclawek konfera na efton.sk
Pátek Červenec 18 10:55:00 CEST 2014


V skutocnosti nepotrebujete drzat tie premenne den, hodina, minuta atd. ako
long, pokojne mohli ostat ako int, len v tych operaciach nasobenia, kde to
pretecenie nastava, ich treba explicitne pred pouzitim pretypovat na long.

Alternativou je explicitne otypovat konstanty ci uz pretypovanim (t.j.
(uint32_t)3600 v C notacii) , alebo suffixom (t.j. 3600UL).

Dalej pretypovanie pred priradenim do premennej toho isteho typu je
zbytocne, to priradenie implicitne pretypuje.

Naviac sa prihovaram za to, aby ste si zvykli pouzivat zasadne
bezznamienkove typy, ak vyslovenie nepotrebujete znamienko. Konverzie
medzi typmi s roznymi znamienkami totiz casto skoncia uplne necakanym
sposobom.

wek



>void zobraz(unsigned long cas1) {
>   long den,hodina,minuta,vterina;
>
>
>   den=long(cas1/86400);
>   cas1=cas1-den*86400;
>   hodina=long(cas1/3600);
>   cas1=cas1-hodina*3600;
>   minuta=long(cas1/60);
>   cas1=cas1-minuta*60;
>   vterina=int(cas1);
>
>
>   lcd.print ( den);
>   lcd.print (" ");
>   lcd.print (hodina);
>   lcd.print (":");
>   lcd.print (minuta);
>   lcd.print (":");
>   lcd.print (vterina);
>   lcd.print (" ");
>
>}



Další informace o konferenci Hw-list