/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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.


Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408186
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste