İki Değişkeni Nasıl Saydırabiliriz

Başlatan BenC, 24 Ekim 2009, 08:45:08

BenC

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.
ŞEHİT KANIYLA ALINMIŞ BU GÜZELİM VATANIN TOPRAKLARI KARIŞ KARIŞ SATILIYOR!!  VATAN HAİNİ OLMA!!

BenC

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 ;
							}


					}

			}


	}
ŞEHİT KANIYLA ALINMIŞ BU GÜZELİM VATANIN TOPRAKLARI KARIŞ KARIŞ SATILIYOR!!  VATAN HAİNİ OLMA!!