"Søren Jensen" <x@x.xxx> wrote:
>hej der er vil ikke nogen der kan fortælle mig hvad jeg gør gal.
>
>signed long SL_var
>signed int SI_var = 40000;
>
>void main (void)
>{
> SL_var = 3000000/(signed long)SI_var;
>}
>
>og så skulle værdien jo gerne være 75 men den er -117..
>
Det mest oplagte er at din kompiler opfatter "int" som 16 bit og "long int" som
32 bit variable.
For så passer det med at konstanten 40000 er over hvad en "int" kan være som
positiv tal (0x7FFF svarende til 32767 decimal).
Værdien SI_var får svarer til -25536, og så passer udregningens resultat.
Om kompileren så burde komme med en advarsel, er så en helt anden sag...
Løsningsforslag er jeg lidt i tvivl om, men er der grund til at blande "int" og
"long int" variable?
--
Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk
Natur og Friluftsliv: <
http://hiker.dk>