Arkadaşlar merhaba , 500000 sonundaki u ne analama gelir ?
for (i = 0; i < 500000U; i++);
unsigned
U olsa ne olur olmasa ne olur.
Burada pek birşey değişeceğini sanmıyorum. El alışkanlığı ile yazılmış gibi.
Ancak benzer ifadeler preprocessor komutlarında veya makrolarda geçtiğinde sorun oluyor. #define sayi 500000U gibi. Bunların bir varsayılan veri boyutu var. Atıyorum 2 byte olsun. Bu durumda 65535'ten büyük sayılar tanımlandığında taşma yapıyor ve değer bambaşka birşey oluyor. Bu sorunu daha önce yaşamıştım, ve bu başlıkta (https://www.picproje.org/index.php/topic,32584.0.html) değinmiştim.
Hocam C de sabit sayılar eğer int sınırları içindeyse int olarak algılanır eğer int sınırının dışında ise long int olarak algılanır.Ama ben iki diyeli 2 tane int sınırları içindeki sayıyı topluyorum ve sonuc int sınırının dışına çıkıyo.Bu durumda derleyici tür dönüşümü yapacağından veri kaybı yaşamış olacağız.Fakat toplanan iki sayıdan birinin sonun L ve UL gibi ifadeler koyarsak bu durumda çıkan sonuç büyük olan türe dönüştürüleceği için bi sorun olmayak.
Mesela int in 2 byte kapladığı bir sistemde,
60000+50000 işleminden sonuç yanlış çıkar çünkü sonuc 65535 ten büyük çıkar.
Fakat
60000UL + 50000 şeklinde yazarsak bi sorun olmaz
'yamak' büyüksün !!
Not: Diğer arkadaşlarada teşekkürler.
Estağfurullah hocam.
Bu tür işlemleri daha iyi algılamak için "type casting" anahtarı ile arama yapabilirsiniz.