Stránka 1 z 1

Velikost int v avr-gcc

Napsal: 24 srp 2009, 01:26
od slash8
Prosím vysvětlete mi jaká je velikost integer pro programování 8 bitových atmelů pomocí avg-gcc. Nikde jsem se to nedočetl. Jen píšou že se dá uměle snížit na 8 bitů, ale jak je tedy int veliké? Pokud je větší než 8 bitů tak proč musím při násobení třeba 20000L*konstanta psát za číslo L abych to přetypoval na long? Děkuji za odpovědi.

Napsal: 24 srp 2009, 06:55
od AB
Dokumentace pro GCC je v poněkud obtížně čitelném dokumentu avr-libc.
http://download.savannah.gnu.org/releases-noredirect/avr-libc/avr-libc-user-manual-1.4.4.pdf
V popisu knihovny <stdlib.h> na straně 64 je vidět kolik bitů mají celočíselné proměnné.

int má 16 bitů, long 32 bitů.
Konstanta má defaultně typ int.
Když napíšete

int intvar = 50000
Long_var = 20000 * int_var
tak překladač vypočítá pravou stranu do pomocné proměnné typu int (ta ovšem přeteče), a pak ji přiřadí do L_var.

Aby se to nestalo, je třeba aspoň jednu hodnotu na pravé straně přetypovat na long.

Long_var = 20000 * (unsigned long)int_var;
nebo
Long_var = 20000L * int_var

Napsal: 24 srp 2009, 08:26
od DRAKE
Velikost int zjistis pomoci sizeof(int). A podle vysledku (8,16,32 ) si rozsvit prislusnou leddiodu. Jinak teda je to 16. Pokud chces psat programy multiplatforme tak pouzivej knihovnu typedefs.h. Ta obsahuje typy napr. uint_8, uint_16, int_64...., když budeš používat tohle, vyhneš se problémů s typy ¨s kterýmkoliv kompilátorem.