unsigned, signed max ertek

Babrian Viktor v at renyi.hu
Thu Mar 18 13:09:30 CET 2004


> Arra gondoltam esetleg valamilyen szamolasokkal, osszehasonlitasokkal,
> feltetelvizsgalatokkal meg lehet oldani, amit
> a fordito szepen konstansra optimalizal, merthogy forditasi idoben
> kiszamolhato az erteke...
>
> De egyenlore pl long-ra ez sem muxik:
> #define MAX_UVAL(val) ( (1<< (sizeof(val)*8))-1 )
> Gondolom a fordito a 32-es shiftelestol szedul meg. Mindegy, majd egyszer
> maskor kitokolom...
Ezekkel az a baj, hogy a muveletek soran egy csomo implicit tipuskonverzio
megy vegbe. Egy ilyen muvelet eredmenye minimum egy  int tipust igenyel.
Ha ez nem baj, akkor "szamolassal" ki lehet hozni, bar ez a megoldas
signed es unsigned valtozok kozt nem tesz kulonbseget:
#define MAX_UVAL(x)	\
	(sizeof(x) == 1 ? 0xff : (sizeof(x) == 2 ? 0xffff : 0xffffffff))

signedre lehet masik makrot csinalni, de az akkor mar neked nem lesz
kenyelmes;)

hali,
Viktor



More information about the Elektro mailing list