Bit ve Byte fonksiyonları değişken / sayı üzerinde bit seviyesinde işlem yapmak için kullanılan yerleşik fonksiyonlardır. 7 adet fonksiyondan oluşur. Bunlar;
Bu fonksiyonumuz verilen bit sayısına göre alabileceği en yüksek değeri verir. Örneğin 10 bitlik bir sayının alabileceği en yüksek değer 1023 ise biz bit(10) yazdığımızda fonksiyon bize 1023 değerini döndürür.
Sözdizimi; bit(n);
n = değeri hesaplanacak bit sayısı
Örnek olarak 12 bitlik sayının alabileceği en yüksek değerini alalım;
1 2 3 4 5 6 7 8 9 |
int sayi = bit(12); // 12 bitlik sayının maksimum değerini hesapla Serial.println(sayi); // sayıyı seri porta yazdır delay(1000); // 1000 ms yani 1 saniye bekler /* * bit(12) fonksiyonu 12 bitlik en yüksek sayı olan 4096 sayısını * döndürecektir ve 4096 sayısını integer türü "sayi" değişkenine atadık. * Ardından "sayi" değişkenini bir saniye aralıklarla seri porta yazdırdık. * / |
Sayı türü bir değişkenin istenilen bir bitini silmek için kullanılır. Silinecek bitin yerine 0 değeri getirilir. En az anlamlı (en sağdaki) bit sıfırıncı bittir, ve sola doğru sayılarak silinmek istenen bitin değeri bulunur.
Sözdizimi; bitClear(x, n);
x = Biti silinecek sayısal değişken
n = Silinecek bit, en az anlamlı olan (en sağdaki) bit için 0’dan başlayarak
Örnek olarak 175 sayısının üçüncü bitini bitClear() fonksiyonu ile temizleyelim;
1 2 3 |
int sayi = 175; // 175 sayısı binary değeri 10101111 'dir int yeniSayi = bitClear(sayi, 2); // sayi değişkeninin 2. bitini temizle Serial.println(yeniSayi); //yeni sayımız 171 yani binary 10101011 oldu |
Yukarıdaki örnekte sayi değişkenine 175 sayısını atadık. Bu sayının binary değeri 10101111’dir. Ardından “bitClear(sayi, 2)” fonksiyonu ile sayı değikenindeki değerin 2 numaralı bitini silmek istedik. 10101111 sayısının 2 numaralı biti kırmızı renkte gösterilen bittir. Biz bu biti sildiğimizde yeni sayımız
Bir sayının istenen bit değerini okumak için kullanılır. Sayı ve okunacak bit değeri olmak üzere iki adet parametre alır. Geriye ise 0 ya da 1 (true yada false) olmak üzere 1 bitlik değer döndürür.
Sözdizimi; bitRead(x, n);
x: Sayı ya da sayı türü değişken
n: Okunacak bit numarası en az anlamlı (en sağdaki) bit’den sıfırdan başlayarak.
Örnek olarak yukarıda verdiğimiz 175 sayısının 3 nolu bitinin değerini okuyalım;
1 2 3 |
int sayi = 175; // 175 sayısının binary değeri 10101111 bool bitDegeri = bitRead(sayi, 3); //sayi değişkeni değerinin 4 nolu bitini oku Serial.println(bitDegeri); // Seri port bize "1" değerini yazdı |
Yukarıdaki programımız bize 10101111 sayısının kırmızı renk ile vurgulanan 3 numaralı biti olan 1 değerini döndürür.
Bu fonksiyonumuz ise istenilen bir sayının istenilen bir bit değerini 1 yani true yapmaya yarayan fonksiyonumuzdur. İki adet parametre alır. Birinci parametre biti değiştirilecek sayı ya da sayısal değişken, ikinci parametre ise 1 yapılacak bit değeridir. Bit değeri an az alamlı (en sağdaki) bitten itibaren sıfırdan başlamak üzere hesaplanır.
Sözdizimi; bitSet(x, n);
x: biti değiştirlecek sayı ya da sayısal değişken
n: değiştirilecek bit numarası (en sağdaki bitten itibaren sıfırdan başlar)
Örnek olarak yine decimal 175 (binary 10101111) sayısının 4 numaralı bitini 1 yapalım;
1 2 3 4 |
int sayi = 175; // binary 10101111 int yeniSayi = bitSet(sayi, 4); // "sayi" değişkeninin 4 nolu bitini 1 yap Serial.println(yeniSayi); // yeni sayıyı seri porta yaz |
Yukarıdaki örnekte bitSet(sayi, 4) komutu ile 175 sayısının 4 numaralı bit değerini 1 yaptık. Yeni sayımız binary 10111111 , decimal 191 oldu.
Bu fonksiyonumuz ise istenilen bir sayının, istenilen bir bitinin değerini 1 ya da 0 yapmak için kullanılır. 3 adet parametre alır. Birinci parametre değeri değiştirilecek sayı ya da sayı türü değişken, ikinci parametresi değeri değiştirilecek bit numarası, üçüncü parametre ise 1 ya da 0 olarak bit değeri.
Sözdizimi: bitWrite(x, n, b);
x: bit değeri değiştirilecek değişken
n: değeri değiştirilecek bit numarası (en sağdan itibaren sıfırdan başlayarak belirlenir.
b: yeni verilecek bit değeri (1 ya da 0, true ya da false)
Örnek olarak 175 sayısının sıfırıncı bitini 0 olarak değiştirelim;
1 2 3 4 |
int sayi = 175; // binary 10101111 int yeniSayi = bitSet(sayi, 1, 0); // sayi değişkeninin 1 numaralı bitini 0 yap // yeniSayi değişkeni değeri binary 10101101, decimal 173 oldu Serial.println(yeniSayi); // yeniSayi değişkeni değerini seri porta yaz |
Yukarıdaki örnekte 175 sayısını atadığımız “sayi” değişkeninin birinci bitini bitSet(sayi, 1, 0) komutu ile sıfır yaptık.
Eski sayımız olan 10101111 sayımız, 10101101 oldu.
Bu fonksiyonumuz iki byte (16 bit) değerindeki bir verinin en anlamlı byte değerini (en soldaki byte) ya da ikiden fazla byte değeri olan verinin en soldan ikinci bayte’ını alamak için kullanılır. Bir adet sayı türü parametre alır.
Sözdizimi: highByte(sayi);
Örnek olarak 2 byte’lık 985 sayısının en anlamlı (en soldaki) byte değerini alalım;
1 2 3 |
int sayi = 64756; // binary 1111110011110100 byte yeniSayi = highByte(sayi); // sayi değişkeninin en anlamlı bayte değerini al Serial.println(yeniSayi); // yeniSayi değişkenini seri porta yazdır |
Yukarıdaki örnekte decimal 64756 yani binary 1111110011110100 sayısının en anlamlı byte değerini aldık;
Eski sayı: “sayi” değişkeni değeri 1111110011110100
Kırmızı ile vurgulanan bölüm en anlamlı bayte
Mavi ile vurgulanan bölüm en az anlamlı bayte
Fonksiyonumuz: highByte(sayi)
Sonuç: kırmızı ile vurgulanan bölüm bizim yeni sayımız oldu.
Yani decimal 252, binary 11111100
Bu fonksiyonumuz ise iki ya da daha fazla byte’dan oluşan verinin en az anlamlı (en sağdaki) byte değerini almak için kullanılır.
Sözdizimi: lowByted(sayi);
Örnek olarak yukarıda verdiğimiz iki byte’lık 64756 sayısının en az anlamlı byte değerini alalım;
1 2 3 |
int sayi = 64756; // binary 1111110011110100 byte yeniSayi = lowByte(sayi); // sayi değişkeninin en az anlamlı bayte değerini al Serial.println(yeniSayi); // yeniSayi değişkenini seri porta yazdır |
Yukarıdaki örnekte decimal 64756 yani binary 1111110011110100 sayısının en az anlamlı byte değerini aldık;
Eski sayı: “sayi” değişkeni değeri 1111110011110100
Kırmızı ile vurgulanan bölüm en anlamlı bayte
Mavi ile vurgulanan bölüm en az anlamlı bayte
Fonksiyonumuz: lowByte(sayi)
Sonuç: mavi ile vurgulanan bölüm bizim yeni sayımız oldu.
Yani decimal 252, binary 11110100