přetečení int v C arduino

Josef Štengl ok1ced na nagano.cz
Pátek Červenec 18 08:51:36 CEST 2014


... pokud není 64 bitů :-)

proto vznikly knihovny stdint.h a inttypes.h a type (u)intN_t a tak dále, kde N je 8, 16, 32 a 64, které jsou nedílnou 
součástí překladače (tedy pokud je mladší 15 let ...).

Kód níže bude/nebude pracovat dle očekávání, podle cílové platformy, dle toho jak je veliké int, jak již zmínil Martin.

ced


Dne 18.7.2014 07:56, Martin Persich napsal(a):
> 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
>
>
>
> _______________________________________________
> 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