Při násobení douv čísle např. 1000 * 1000 , výsledkem by mělo být v hexa F4240. Program dává výsledek v hexa 0x42 a 0x40 . tedy první dvě části, hodnoty ze zbývajících 2 registrů jsou nulové.
Program vypadá:
long cislo;
cislo=1000 * 1000;
díky za rady.
administrator: přejmenováno z "Násobení dvou čísel typu int"
Překladač si to interně před překladem násobí(proč by tím zatěžoval mcu když je výsledek vždy stejnej) jen v 16 bitech (int) a do proměnný nacpe oříznutej výsledek. Když napíšeš rovnou long temp = 1000000; bude to v paměti vpořádku stejně tak jako po vynásobení dvou long proměnných.
Když napíšeš long temp = (long)1000 * (long)1000; bude to ok.
Nebo řečeno jinak:
Konstanta je v AVR-GCC defaultně typu int.
Když vynásobíme dvě čísla typu int, dostaneme výsledek typu int.
Aby výsledek byl typ long, musí aspoň jeden člen na pravé straně být typu long.
Konstantu přetypujeme na long buď tak jak píše piityy, nebo častěji sufixem L.