[elektro] C kérdés plusz
Papp Zoltán
zombi at c2.hu
Mon May 19 10:09:31 CEST 2008
2008.05.16. 22:30:25 dátumon Moczik Gabor <pm_levlista at progzmaster.hu>
írta:
> Ha u16=u8*u16 kepletet irsz, bar az eredmeny valtozo 16 bit, akkor se
> fogja
> 16 biten vegezni a szorzast, csak 8-on, es majd az eredmenyt castolja 16
> bitre.
Szerintem meg nem.
Az egész számokon végzett szorzás algebrailag kommutatív művelet, azaz a
tagok felcserélhetőek, a végeredmény ugyanaz lesz.
És szerintem a legtöbb fordító ebből indul ki. Azaz végignézi az összes
összetevőt, meghatározza melyiknek legnagyobb a mérettartománya, majd
ebben végzi el a műveleteket. Aztán ezt castingolja az
eredmény-változóhoz. Azaz u8*u16-ot mindenképpen 16 biten fogja elvégezni,
és aztán az eredményt alakítja 16 bitessé. Ha az eredmény 32 bites lenne
(u32=u8*u16), akkor az u8 és u16 közül legalább az egyik típusát
módosítani kell 32 bitesre (pl. (long)u16), hogy az eredmény jó legyen, és
ne egy 16 bitre csonkolt valami.
Pl. az IAR C for AVR az u16=u8*u16-nál a lefordított kódban az u8-at a
szorzás előtt u16-ra bővíti (fügetlenül a sorrendtől).
Üdv
--
Papp Zoltán
OneWay Electronics Kft
Hangszerviz
More information about the Elektro
mailing list