[ alpha @ 21.05.2004. 02:06 ] @
| Potrebno je da za odredjenu promenjlivu osiguram da ima celobrojni opseg od 0 do 255. Posto se radi o broju, ja sam jednostavno naveo da je ta promenljiva unsigned char i svaki put kada mi je potrebna njena vrednost ja uradim typecasting u unsigned short. Na slican nacin sam osigurao da korisnik ne moze da unese vrednost van ovog opsega, jer svaki put kad se unosi broj, ja ga "uglavim" izmedju 0 i 255 tako sto ga typecastujem nazad u unsigned char. Da li je ovo dobro, ili da batalim taj nacim i da jednostavno ogranicim mogucnost unosa vrednosti promenljive? |
[ Mirko Rajkovača @ 21.05.2004. 16:44 ] @
Bolje i jednostavnije ti je staviti uslov tipa:
if ((a>=0) && (a<=255))
{
//something
}
else
{
//error
}
Jesi li se zapitao šta će se desiti ako korisnik unese veci broj od 255?

[ filmil @ 21.05.2004. 17:29 ] @
Obično nije dobra ideja da tako svodiš na opseg. To je zato što ti u različitim situacijama može zatrebati različita obrada prekoračenja: na primer premotavanje, zasićenje ili nešto treće. Ako opseg ograničiš konverzijom onda si na milost i nemilost kompajlera.
f
[ milanche @ 22.05.2004. 00:21 ] @
Cast-ovanje bi bilo ocajno lose resenje za to sto pokusavas (tj. clipping).
Evo kontra primera:
int main(void)
{
int x = 0x7FFFFF01;
unsigned char ch = (unsigned char)x;
printf("ch = 0x%X", ch);
return 0;
}
pa ces videti da cast-ovanje zapravo zadrzava samo least significant byte (LSByte) i
to metodom odsecanja, sto nikako ne daje to sto hoces.
[ alpha @ 22.05.2004. 02:01 ] @
...eh... hvala... pa ono sto sam ja imao na umu je da kad korisnik unese broj veci od 255, kompajler ga jednostavno "premota" u opseg od 0 do 255, ali sad vidim da to bas i ne igra :) onda cu ipak da idem na if (x>255 || x<0)... a taman sam mislio da sam provalio neko bas elegantno resenje :))
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.