ikilik değişmezler

C++14 standlarıyla birlikte artık C++ dilinde de tamsayı değişmezlerini doğrudan ikilik sayı sisteminde yazabiliyoruz.  Bu şekilde yazılan bir değişmeze İngilizcede “binary literal” deniyor.  Java, C#,  D, Swift, Go, Scala, Ruby, Python, OCaml gibi programlama dillerinde zaten var olan bu özelliğin C++ diline eklenmesi biraz geç oldu diyebiliriz. Bazı C derleyicileri de 2007 yılından beri ikilik değişmezleri gayriresmi bir eklenti olarak  sunuyorlardı.

Sözdizim (syntax) çok basit: İkilik değişmezi 0b ya da 0B öneklerinden birini kullanıp doğrudan ikilik sayı sisteminde yazıyoruz:

İkilik sayı sisteminde yazılmış değişmezler için de tamsayı değişmezlerine ilişkin genel kurallar geçerli. int sayı sınırları içinde olan değişmezlerimiz int türden. Değişmezin yazımında l, L, u, U, UL, LL, ULL gibi son ekleri kullanarak türünü dilediğimiz gibi belirleyebiliyoruz.
Bir tamsayı değişmezinin geçerli olarak kullanılabildiği her yerde ikilik değişmezlerimizi de kullanabiliyoruz:

Ancak yine de önemli bir eksiklik olduğunu söyleyebiliriz. std::ostream ya da std::istream nesneleri için ikilik sayı sisteminde yazma ya da okuma amaçlı formatlama yapamıyoruz.
Bu formatlama için ne std::ios_base::fmtflags türünden bir bitsel maskemiz ne de bu amaçla kullanılabilecek bir manipülatörümüz var. C++17 ile birlikte std::bin manipülatörünün de standart kütüphaneye eklenmesini bekliyoruz.

Peki normal bir ruh sağlığı içinde kaynak kodumuzda durup duruken neden bir değişmezi ikilik sayı sisteminde yazmak isteyelim? Kaynak kodda ikilik değişmezlerin kullanılması özellikle mikrodenetleyici programlamada ve bitsel manüpülasyon işlemlerinde fayda sağlıyor. Değişmezi ikilik sayı sisteminde yazdığımızda birlenmiş bitlerin hangileri olduğunu doğrudan görebiliyoruz.

Yine C++14 ile gelen bir özellik olan basamak ayırıcısını ikilik değişmezler için de kullanabiliyoruz:

 

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kod Eklemek İçin Okuyun