Re: přetečení int v C arduino

Martin Persich persich na transcon.cz
Pátek Červenec 18 07:56:24 CEST 2014


Obecně není v "C" nikde řečeno, je-li "int" 16 nebo 32 bitů. Záleži na 
procesoru a kompilátoru. Datový typ "long" je pak 32 bitů.
Martin. persich na transcon.cz

----- Original Message ----- 
From: "Petr Zapadlo" <zapik na email.cz>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Friday, July 18, 2014 7:16 AM
Subject: přetečení int v C arduino


Zdravím,

nejsem úplně zběhlý v Céčku, tak mě občas něco překvapí.
Mám následující funkci:

void zobraz(unsigned long cas1) {
   int den,hodina,minuta,vterina;


   den=int(cas1/86400);                //den=0, cas1=36000
   cas1=cas1-den*86400;            //den=0, cas1=36000
   hodina=int(cas1/3600);            //hodina=10, cas1=65535
   cas1=cas1-hodina*3600;        //hodina=10, cas1=65535
   minuta=int(cas1/60);            //minuta=1092,
   cas1=cas1-minuta*60;
   vterina=int(cas1);



}

A když proměnná cas1 má hodnotu přes  36000, tak dojde někde přetečení a
v minutách se objeví hodnota přes 1092.  Do komentářů jsem připsal hodnoty.
Při změně proměných na long se to začalo chovat korektně.
V čem je problém, co jsem nepochopil?

Díky

Petr

_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list





Další informace o konferenci Hw-list