Merhaba arkadaşlar.
a , b ve c değişkenlerim var.
a unsigned char türünden olup alabileceği degerler min 00 ila max 7F arası. Normalde FF e kadar olması gerekiyor ama ben sınırlandırmak istiyorum.
b unsigned char türünden olup alabileceği değerler min 00 ila max 7F arası. Normalde FF e kadar olması gerekiyor ama ben sınırlandırmak istiyorum.
c signed char türünden olup alabileceği değerler -128 ila +127 arası
c değişkeni değişik değerlerle bu a ve b değişkenini saydırmakta.
Arttırma yönünde;
b değişkeni c vasıtasıyla (c değeri "-15 de olabilir +120 de") arttırılıyor. b = 7F olunca a değişkeni de 1 artıyor ama kalanıda b değişkenine ekliyor.
Eksiltme yönünde;
b değişkeni c vasıtasıyla (c değeri ile "-15 de olabilir +120 de") eksiliyor. b = 00 olunca a değişkeni de 1 azalıyor ama kalanıda b değişkeninden çıkarıyor.
Şöyle bişey yazdım.
void Hesapla()
{
// -128 ila +127 arası değer verebilen bir sensör
c = SensorOku(0x03);
// Arttırma yönünde
if (c > 0 )
{
b = b + c;
if (b > 127 )
{
b = (b %127)-1;
a = a + 1;
if (a > 127 )
{
a = (a %127)-1;
}
}
}
//Eksiltme yönünde
if (c < 0 )
{
b = b + (-127);
if (b > 127)
{
b = 0x80 -((b %127)) ;
a = a - 1;
if (a > 127)
{
a = 0x80- ((a %127)) ;
}
}
}
}
Bu kod bir yere kadar düzgün çalışıyor. Arttırma yönünde sıkıntım yok lakin eksiltirken sorun çıkarıyor.
Bana bu konuda yardımcı olabilirmisiniz sayın üstadlar.
Uzun uğraşlar sonucunda sorunu çözdüm.
Eksiltme yönündeki sorun çözüldü. Yukarıda ki kodda mod işlemi uyguluyordum burda ise sadece 127 çıkartarak sağlıklı bir eksiltme sağlamış oldum.
void Hesapla()
{
// -128 ila +127 arası değer verebilen bir sensör
c = SensorOku(0x03);
// Arttırma yönünde
if (c > 0 )
{
b = b + c;
if (b > 127 )
{
b = (b %127)-1;
a = a + 1;
if (a > 127 )
{
a = (a %127)-1;
}
}
}
//Eksiltme yönünde
if (c < 0 )
{
b = b + (-127);
if (b > 127)
{
b = b-127 ;
a = a - 1;
if (a > 127)
{
a = a -127 ;
}
}
}
}