|
| promotion / cast (igen igen) Fra : Troels Thomsen |
Dato : 30-10-03 17:09 |
|
Jeg bliver ved med at komme i tvivl om promotions og om cast er nødvendig.
Havner et mellemresultat fra integer x integer altid i en long ?
int calc (int x, int a, int b)
{
return a * x / 1024 + b; // x = [0;1024]
}
eller er det bedre :
return (((long)a * x) / 1024) + b; // x = [0;1024]
(ja, jeg kunne også skifte ned 10 gange)
(Skal kompileres til en 8 bit embedded processor.)
mvh Troels
| |
Byrial Jensen (30-10-2003)
| Kommentar Fra : Byrial Jensen |
Dato : 30-10-03 18:10 |
|
Troels Thomsen wrote:
> Jeg bliver ved med at komme i tvivl om promotions og om cast er nødvendig.
> Havner et mellemresultat fra integer x integer altid i en long ?
Nej, det havner altid i en int.
> int calc (int x, int a, int b)
> {
> return a * x / 1024 + b; // x = [0;1024]
> }
Kan a * x ikke repræsenteres i en int, giver det udefineret adfærd. Alt
vil være tilladt.
> eller er det bedre :
>
> return (((long)a * x) / 1024) + b; // x = [0;1024]
Ja, hvis produktet kan repræsenteres i en long, men ikke i en int.
> (ja, jeg kunne også skifte ned 10 gange)
Ja, men du er ikke garanteret at det vil give det samme resultat. Det
ville du have været hvis operanderne var unsigned.
| |
|
|