Bitsel operatörler bir verinin içerisinde mantıksal VE, VEYA, DEĞİL gibi işlemlerin yanında Sola ve Sağa öteleme işlemleri de yapabilen opratörlerdir. İşte PIC C dilinde kullanılan Bitsel Operatörle şunlardır.
Şimdi birer birer bu operatörleri ele alalım.
Bitsel VE operatörünü simgeleyen işaret & işaretidir. Bu operatör iki veri arasında Mantıksal VE işlemi yapmak için kullanılır. Bildiğiniz üzere Mantıksal VE işlemi, yalnızca iki veri de True “1” ise True “1” olarak çıkış veren, diğer durumlarda False “0” olarak çıkış veren işlemdi.
Şimdi Mantıksal VE işlemi doğruluk tablosuna göre 1453 verisi ile 1071 verisi arasında VE işlemi uygulayalım.
1 2 3 4 5 6 7 8 9 10 11 12 |
unsigned int a = 1453; // a değişkenine decimal 1453 değeri atadık binary = 10110101101 unsigned int b = 1071; // b değişkenine decimal 1071 değeri atadık binary = 10000101111 unsigned int y = a&b; // a ile b değişkenine VE işlemi uyguladık /* * Doğruluk tablosuna göre sonuç; * * a = 10110101101 / decimal 1453 * b = 10000101111 / decimal 1071 * &_________________ * y = 10000101101 / decimal 1069 */ |
Yukarıdaki işleme göre, a ve b değişkeninin yalnızca karşılıklı 1 olan bitleri y çıkışında 1 olarak kaldı, diğer karşılıklı bitler y çıkışında 0 olarak yazıldı.
Bitsel VEYA operatörünü simgeleyen işaret ise | işaretidir. Bu operatörümüz ise iki veri arasında Mantıksal VEYA işlemi yapmak için kullanılır. Bilindiği üzere mantı,ksal VEYA işleminde iki bilgiden herhangi biri 1 ise çıkışı 1 olarak veriyordu ve yalnızca her iki veri de 0 ise çıkış olarak 0 veriyordu.
Şimdi yukarıdaki örnekte kullandığımız a ve b değişkenine VEYA işlemi uygulayalım;
Mantıksal VEYA işlemi doğruluk tablomuz:
1 2 3 4 5 6 7 8 9 10 11 12 |
unsigned int a = 1453; // a değişkenine decimal 1453 değeri atadık binary = 10110101101 unsigned int b = 1071; // b değişkenine decimal 1071 değeri atadık binary = 10000101111 unsigned int y = a|b; // a ile b değişkenine VEYA işlemi uyguladık /* * Doğruluk tablosuna göre sonuç; * * a = 10110101101 / decimal 1453 * b = 10000101111 / decimal 1071 * |_________________ * y = 10110101111 / decimal 1455 */ |
Yukarıdaki a ve b değişkeni aradındaki mantıksal VEYA işleminin sonucunda iki veride yalnıca karşılıklı 0 olan değerler 0 olarak kaldı. Herhangi biri ya da her ikisi de 1 olan değerler y değişkenine 1 olarak aktarıldı.
Bitsel değil operatörünü simgeleyen işaretimiz ~ işaretidir. Bu operatörümüz bir verinin bitlerinin değerini terslemek yani 1 olanları 0, 0 olanları 1 olarak çıkışa aktaran operatördür. Mantıksal değil işlemi için doğruluk tablomuz şöyledir;
Az önceki a değişkenimize atadığımız 1453 sayısının değilini alıp y değişkenimize aktaralım;
1 2 3 4 5 6 7 8 9 10 11 |
unsigned int a = 1453; // a değişkenine decimal 1453 değeri atadık binary = 10110101101 unsigned int y = ~a; // a değşkeninin değilini alıp y değişkenine aktardık /* * Sonuç; * * a = 10110101101 / decimal 1071 * ~________________ * y = 01001010010 / decimal 594 * */ |
Özel VEYA operatörü ^ işareti ile gösterilir. Özel VEYA operatörü iki verinin bitlerinden biri 1, diğeri 0 ise 1 çıkışı verir, diğer durumlarda ise 0 çıkışı verir. Mantıksal Özel VEYA operatörünün doğruluk tablosu aşağıda verilen görseldeki gibidir.
Örnek olarak yukarıda verdiğimiz a be b değişkenlerine Özel VEYA işlemi uygulayıp sonucu y değişkenine atayalım:
1 2 3 4 5 6 7 8 9 10 11 12 |
unsigned int a = 1453; // a değişkenine decimal 1453 değeri atadık binary = 10110101101 unsigned int b = 1071; // b değişkenine decimal 1071 değeri atadık binary = 10000101111 unsigned int y = a^b; // a ile b değişkenine VEYA işlemi uyguladık /* * Doğruluk tablosuna göre sonuç; * * a = 10110101101 / decimal 1453 * b = 10000101111 / devimal 1071 * ^_________________ * y = 00110000010 / decimal 386 */ |
Sola Öteleme Operatörü, verinin tüm bitlerini sola kaydırır. En soldaki bir bit kaybolur, bunun yerine ise en sağa 0 değerinde bir bit eklenir. Bu operatör kullanılırken, operatörün soluna işlem yapılacak veri eklenir, sağına ise kaç bit değerinde kaydırılacağı yazılır.
Örneğin yukarıda kullandığımız a değişkenini 3 bit sola öteleyelim:
1 2 3 4 5 6 7 8 9 10 |
unsigned int a = 1453; // a değişkenine decimal 1453 değeri atadık binary = 10110101101 unsigned int y = a<<3; // a değişkeni değerini 3 bit sola öteleyip y değişkenine atadık /* * Sonuç: * * a = 10110101101 / decimal 1453 * a<<3_________________ * y = 10101101000 / decimal 1384 */ |
Yukarıdaki örnekte görüldüğü üzere a değişkeninin bitleri 3 bit sola kaydı. Kayma sırasında solda 3 bit kayboldu, bunların yerine ise verinin sağına 3 adet 0 değerinde bit eklendi.
Sağa Öteleme Operatörü, verinin tüm bitlerini sağa kaydırır. En soldaki bir bit kaybolur, bunun yerine ise en sağa 0 değerinde bir bit eklenir. Bu operatör kullanılırken, operatörün soluna işlem yapılacak veri eklenir, sağına ise kaç bit değerinde kaydırılacağı yazılır.
Örneğin yukarıda kullandığımız a değişkenini 3 bit sola öteleyelim:
1 2 3 4 5 6 7 8 9 10 |
unsigned int a = 1453; // a değişkenine decimal 1453 değeri atadık binary = 10110101101 unsigned int y = a>>3; // a değişkeni değerini 3 bit sağa öteleyip sonucu y değişkenine atadık /* * Sonuç: * * a = 10110101101 / decimal 1453 * a>>3_________________ * y = 00010110101 / decimal 181 */ |
Yukarıdaki örnekte görüldüğü üzere a değişkeninin bitleri 3 bit sağa kaydı. Kayma sırasında sağdaki 3 bit kayboldu, bunların yerine ise verinin soluna 3 adet 0 değerinde bit eklendi.