4. Operatörler İfade içerisindeki değişken ve diğer ifadelere uygulandığında yeni değerlerin elde edilmesini sağlayan ve kendilerine özel sembolik gösterimleri olan sözdizimleridir. mikroc derleyicisi tarafından desteklenen operatörler: Arithmetic Operators Assignment Operators Bitwise Operators Logical Operators Reference/Indirect Operators Relational Operators Structure Member Selectors Comma Operator, Conditional Operator? : Array subscript operator [] Function call operator () sizeof Operator Preprocessor Operators # and ## Operators Precedence and Associativity There are 15 precedence categories, some of them contain only one operator. Operators in the same category have equal precedence. If duplicates of operators appear in the table, the first occurrence is unary and the second binary. Each category has an associativity rule: left-to-right ( ), or right-to-left ( ). In the absence of parentheses, these rules resolve a grouping of expressions with operators of equal precedence. Operatörler yapılarına göre üç gruba ayrılır: Unary Operatörler (1 operand gerektirir) Binary Operatörler (2 operand gerektirir) Tenary Operatörler (3 operand gerektirir) Operatör Açıklama Örnek Kullanım Unary 1 operand gerektirir ++a Binary 2 operand gerektirir a+b Tenary 3 operand gerektirir buyuk = (a>b)? a : b -16-
Operatör Öncelikleri Öncelik No Operatör Operand Sayısı Öncelik Yönü 1 () []. -> 2 2! ~ ++ -- + - * & (type) sizeof 1 3 * / % 2 4 + - 2 5 << >> 2 6 < <= > >= 2 7 ==!= 2 8 & 2 9 ^ 2 10 2 11 && 2 12 2 13?: 3 14 = *= /= %= += -= &= ^= = <<= >>= 2 15, 2 4.1. Aritmetik Operatörler Operatör Açıklama Öncelik Örnek Binary Operatörler + Toplama 12 c = a + b - Çıkarma 12 c = a - b * Çarpma 13 c = a * b / Bölme 13 c = a / b % Mod Bölme 13 c = a % b Unary Operatörler + Pozitif İşaret 14 c = + a - Negatif İşaret 14 c = - a ++ Artırma 14 c = ++a -- Azaltma 14 c = --a -17-
Uygulama: Aşağıdaki program işletildiğinde değişkenlerin alacağı son değer ne olur? a=5; b=10; c = ++a + b++; a=? b=? c=? Unary Operatör kullanımında; Unary operatör eğer solda ise; önce unary operatör işletilir elde edilen sonuç ifadede kullanılır ve ifade sonucu soldaki değişkene aktarılır. Unary operatör eğer sağda ise; önce unary operatör işletilmeden operand değeri ifadede kullanılır ve ifade sonucu soldaki değişkene aktarılır. Soldaki değişkene aktarımdan sonra, ilgili unary operatör işletilir. Bu durumda sonuçlar şu şekilde bulunur: a=6 b=11 c=16 Uygulama: Aşağıda sembolik bellek üzerinde x, y ve z değişkenleri verilmektedir. Bu değişkenlerin ilgili program satırları işletildikten sonraki alacakları son değerleri sembolik bellek üzerinde gösteriniz. Komut Satırları x = 5; y = ++x; x = y--; z = x % y; x = z-- - --y; Sembolik Bellek x y z??? Uygulama: Aşağıda sembolik bellek üzerinde x, y ve z değişkenleri verilmektedir. Bu değişkenlerin ilgili program satırları işletildikten sonraki alacakları son değerleri sembolik bellek üzerinde gösteriniz. Komut Satırları Sembolik Bellek int x, y, z; x y z??? x = 3; 3?? y = ++x + x++;??? z = x * y / 3 % y + 5;??? -18-
Uygulama: Aşağıda sembolik bellek üzerinde x, y ve z değişkenleri verilmektedir. Bu değişkenlerin ilgili program satırları işletildikten sonraki alacakları son değerleri sembolik bellek üzerinde gösteriniz. Komut Satırları Sembolik Bellek int x, y, z; x y z??? x = 3; 3?? y = x++ + ++x; 5 8? z = x * y / 3 % y + 5; 5 8 10 Notlar: ++ ve -- unary operatörlerde öncelik sırası sağdan sola doğrudur. (y = x++ + ++x;) işleminde, ++x işlem sonucunda elde edilen değer, soldaki x++ için başlangıç değeri kabul edilir. 4.2. Karşılaştırma Operatörleri Operatör Açıklama Örnek == Eşit a==b!= Eşit Değil a!=b > Büyük a>b < Küçük a<b >= Büyük Eşit a>=b <= Küçük Eşit a<=b 4.3. Mantıksal Operatörler Operatör Açıklama Örnek! NOT!(a==1) && AND (a==1) && (b<5) OR (a==1) (b<5) -19-
Doğruluk Tabloları DOĞRULUK TABLOLARI A B! A! B A && B A B false false true true false false false true true false false true true false false true false true true true false false true true 4.4. Bitsel (Bitwise) Operatörler Operatör Açıklama Örnek & And 0x02 (0x12 & 0x0F) Or 0x1F (0x12 0x0F) ^ Exor 0x1D (0x12 ^ 0x0F) ~ Invert 0xF0 (~ 0x0F) << Shift Left 0x1E ( 0x0F << 1) >> Shift Right 0x07 ( 0x0F >> 1) 0x01 ( 0x0F >> 3) Uygulama: Aşağıdaki ifadenin sonucu nedir? F = 0xA9 & ( 0xD6 0b01010101 ) + 0x05 Çözüm : Not : Operatörlerin öncelik sırasına göre aşağıdaki gibi işletim gerçekleşir : 1. Öncelikle Parantez içi (bitwise operatörü ) 2. + 3. bitwise & operatörü F = 0xA9 & ( 0xD6 0b01010101 ) + 0x05 F = 0xA9 & ( 0xD6 0b01010101 ) + 0x05 1.Adım F = 0xA9 & ( 11010111 ) + 0x05 F = 0xA9 & 11010111 + 0x05 2.Adım F = 0xA9 & 1101110 F = 0xA9 & 1101110 3.Adım F = 10001000-20-
Uygulama: Aşağıdaki kodların işletimi sonucunda b nin son değeri ne olur? short a, b; a = 0x81; b = a >> 1; Sign Bit B7 B6 B5 B4 B3 B2 B1 B0 Hex a 1 0 0 0 0 0 0 1 0x81 b 1 1 0 0 0 0 0 0 0xC0 Not: İşaretli tip değişkenlerde sağa kaydırma (>>) işlemlerinde, B7 den B6 ya Sign Bit aktarılır. Sola kaydırma işlemlerinde ise, normal kaydırma işlemleri yürütülür (Sola kaydırmada Overflow meydana gelebilir.) Uygulama: Aşağıdaki kodların işletimi sonucunda b nin son değeri ne olur? short a, b; a = 0xA5; b = a << 1; Sign Bit B7 B6 B5 B4 B3 B2 B1 B0 Hex a 1 0 1 0 0 1 0 1 0xA5 b 0 1 0 0 1 0 1 0 0x4A Uygulama: Aşağıdaki kodların işletimi sonucunda b nin son değeri ne olur? short a, b; a = 0x75; b = a << 1; Sign Bit B7 B6 B5 B4 B3 B2 B1 B0 Hex a 0 1 1 1 0 1 0 1 0x75 b 1 1 1 0 1 0 1 0 0xEA -21-
Örnek: ^ Ex-Or Exclusive-Or ( Özel Veya) Girişler birbirinden farklı ise sonuç 1, girişler birbirinin aynı ise so nuç 0 olarak elde edilir. x 0 0 1 1 0 1 1 0 y 1 0 0 0 1 1 0 0 x^y 1 0 1 1 1 0 1 0 4.5. Atama Operatörleri 4.5.1. Basit Atama Operatörü Atama operatörü, ifade_2 sonucunun ifade_1 ile temsil edilen değişkene aktarılmasını sağlar. Genel Format ifade_1 = ifade_2; Örnek Kullanımlar a = b; a = 10; 4.5.2. Bileşik Atama Operatörü Genel Format ifade_1 op = ifade_2; Bileşik Atama Operatörleri Atama Açıklama Örnek Operatörü Gösterim Karşılığı += Topla Ata x += 5; x = x + 5; -= Çıkart Ata x -= 5; x = x - 5; *= Çarp Ata x *= 5; x = x * 5; /= Böl Ata x /= 5; x = x / 5; %= Mod Ata x %= 5; x = x % 5; &= Bitsel And Ata x &= 5; x = x & 5; = Bitsel Or Ata x = 5; x = x 5; ^= Bitsel ExOr Ata x ^= 5; x = x ^ 5; <<= Bitsel Sola Shift Ata x <<= 5; x = x << 5; >>= Bitsel Sağa Shift Ata x >>= 5; x = x >> 5; -22-
Örnek: PORTA'nın PA1 bit değeri 1 ise PortC'nin PC0 bitinin SET edilmesi, değilse RESET edilmesi için gerekli MikroC kodunu yazınız. -23-
Örnek: PORTA'nın PA0 ve PA1 bit değerleri 1 ise PortC'nin PC0 bitinin SET edilmesi, değilse RESET edilmesi için MikroC kodunu yazınız. Örnek: 8 bit işaretli/işaretsiz bir sayının LSB 4 bitinin elde edilmesi Sayımız 0x85 olsun. MSB LSB 1 0 0 0 0 1 0 1 0x85 133 & 0 0 0 0 1 1 1 1 0x0F 15 Maskeleme 0 0 0 0 0 1 0 1 0x05 5-24-
Sayımız signed X olarak tanımlı iken X = 0xEC olduğunda ise; Hex Dec 1 1 1 0 1 1 0 0 0xEC -20 & (Bitwise And) 0 0 0 0 1 1 1 1 0x0F 15 0 0 0 0 1 1 0 0 0x0C 12 Örnek : Tek bitin sonsuz çevrimde sola ve sağa kaydırılması. B7 B6 B5 B4 B3 B2 B1 B0 Hex 0 0 0 0 0 0 0 1 0x01 0 0 0 0 0 0 1 0 0x02 0 0 0 0 0 1 0 0 0x04 0 0 0 0 1 0 0 0 0x08 0 0 0 1 0 0 0 0 0x10 0 0 1 0 0 0 0 0 0x20 0 1 0 0 0 0 0 0 0x40 1 0 0 0 0 0 0 0 0x80 0 1 0 0 0 0 0 0 0x40 0 0 1 0 0 0 0 0 0x20 0 0 0 1 0 0 0 0 0x10 0 0 0 0 1 0 0 0 0x08 0 0 0 0 0 1 0 0 0x04 0 0 0 0 0 0 1 0 0x02 0 0 0 0 0 0 0 1 0x01 0 0 0 0 0 0 1 0 0x02-25-
-26-