Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: armsistem - 10 Aralık 2012, 19:52:49

Başlık: for döngüsü 'U'
Gönderen: armsistem - 10 Aralık 2012, 19:52:49
Arkadaşlar merhaba , 500000 sonundaki u ne analama gelir ?

for (i = 0; i < 500000U; i++);
Başlık: Ynt: for döngüsü 'U'
Gönderen: LukeSkywalker - 10 Aralık 2012, 20:06:50
unsigned
Başlık: Ynt: for döngüsü 'U'
Gönderen: armsistem - 10 Aralık 2012, 20:18:31
U olsa ne olur olmasa ne olur.
Başlık: Ynt: for döngüsü 'U'
Gönderen: Tagli - 10 Aralık 2012, 20:26:08
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.
Başlık: Ynt: for döngüsü 'U'
Gönderen: yamak - 10 Aralık 2012, 20:52:43
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
Başlık: Ynt: for döngüsü 'U'
Gönderen: armsistem - 10 Aralık 2012, 20:54:28
'yamak' büyüksün !!

Not: Diğer arkadaşlarada teşekkürler.
Başlık: Ynt: for döngüsü 'U'
Gönderen: yamak - 10 Aralık 2012, 20:59:21
Estağfurullah hocam.
Başlık: Ynt: for döngüsü 'U'
Gönderen: LukeSkywalker - 10 Aralık 2012, 21:13:03
Bu tür işlemleri daha iyi algılamak için "type casting" anahtarı ile arama yapabilirsiniz.