İkili Kodlanmış Onluk Sayılar / Binary Coded Decimal (BCD)

ikili kodlanmış onluk sayılar
Sayı Sistemleri Serisi
İkili Sayı Sistemiİşaretli İkili Sayılarİkili Kesirler
İkili – Onluk Dönüşümüİkili Kodlanmış Onluk Sayılar (BCD)
On Altılı Sayı SistemiSekizli Sayı Sistemi

İkili Kodlanmış Onluk sayılar (Binary Coded Decimal veya BCD), onluk (decimal) sayıları dijital sistemlerde ikili formda temsil etmek ve dönüştürmek için kullanılan özel bir numaralandırma işlemidir.

İkili sayılar serisindeki önceki eğitimlerimizde gördüğümüz gibi, dijital elektronik devrelerde ve bilgisayar sistemlerinde kullanılan, her birinin kendine özgü bir amacı olan birçok farklı ikili kodlama yöntemi vardır.

Doğal olarak ondalık (taban-10) bir dünyada yaşadığımız için, kullandığımız bu ondalık sayıları bilgisayarların, mikrodenetleyicilerin ve dijital elektronik cihazların anlayabileceği bir ikili (taban-2) ortama dönüştürmenin verimli bir yoluna ihtiyacımız vardır. İşte İkili Kodlanmış Onluk Sayılar kodlama sistemi bu işlemi kolaylaştırmamızı sağlar.

Daha önce, n-bitlik bir ikili kodun, 1’ler ve 0’lardan oluşan 2^n farklı kombinasyon üretebilen bir bit grubu olduğunu öğrenmiştik. BCD sisteminin avantajı, her bir ondalık basamağın, tıpkı On Altılı (Hexadecimal) sayı sisteminde olduğu gibi 4 bitlik (nibble) bir ikili grup ile temsil edilmesidir. Yani, 10 farklı ondalık rakamı (0’dan 9’a kadar) temsil edebilmek için 4-bitlik bir ikili koda ihtiyacımız vardır.

Ancak burada dikkat edilmesi gereken önemli bir nokta vardır: İkili Kodlanmış Onluk sayılar ile On Altılı (Hexadecimal) sayılar aynı şey değildir. 4 bitlik bir on altılı sayı, F_{16} (1111_2, yani ondalık 15) değerine kadar geçerliyken, BCD sayılar en büyük ondalık rakam olan 9’da, yani 1001_2‘de durur. Dört ikili basamak kullanılarak toplam 16 (2^4) farklı kombinasyon üretilebilmesine rağmen, BCD numaralandırma sisteminde geriye kalan altı kombinasyon yasaklıdır. Bu kullanılmayan veya yasaklı sayılar şunlardır: 1010 (10), 1011 (11), 1100 (12), 1101 (13), 1110 (14) ve 1111 (15).

BCD sisteminin en büyük avantajı, onluk (taban-10) ile ikili (taban-2) format arasındaki dönüşümlerin insan donanım arayüzlerinde (ekranlar, tuş takımları vb.) çok hızlı ve kolay yapılabilmesidir. Temel dezavantajı ise, 1010 ile 1111 arasındaki 6 adet 4-bitlik kombinasyon kullanılmadığı için bellek (hafıza) ve veri iletimi açısından standart ikili sisteme göre israf yaratmasıdır. Yine de, BCD kodlama sistemi özellikle 7-segment dijital göstergeler kullanan birçok önemli uygulamada tercih edilir. İkili kodlanmış sayılar hakkında daha fazla bilgi edinmek isterseniz BCD Vikipedi sayfasına göz atabilirsiniz.

BCD numaralandırma sisteminde, bütün bir ondalık sayı tek bir ikili sayıya dönüştürülmez. Bunun yerine, sayı içindeki her bir ondalık rakam dört bite ayrılır. Her ondalık basamak, rakamın ağırlıklı ikili değerine doğrudan çevrilerek temsil edilir.

Örneğin, ondalık sistemdeki 357_{10} sayısı, BCD formunda şu şekilde ayrıştırılarak gösterilir:

357_{10} = 0011 \quad 0101 \quad 0111 \quad (BCD)

Buradan BCD’nin ağırlıklı bir kodlama kullandığını net bir şekilde görebiliriz. Çünkü her 4 bitlik grubun içindeki ikili bitler, nihai değerin belirli bir ağırlığını temsil eder. BCD kodunda kullanılan ağırlıklar sırasıyla 8, 4, 2 ve 1’dir. Bu nedenle BCD kodlaması, ondalık basamakların 4 bitlik karşılıklarını ifade ederken endüstride yaygın olarak 8421 kodu olarak adlandırılır.

BCD İkili Ağırlıkları

İkili Üst Değer (Kuvvet)2^32^22^12^0
İkili Ağırlık8421

Ondalık sayılarda sola doğru ilerledikçe her basamağın ağırlığı 10 kat artar. BCD sayı sisteminde de, bir basamağı oluşturan her bir ikili bitin ağırlığı sağdan sola doğru 2 kat artar. Yani ilk (en sağdaki) bit 1 (2^0), ikinci bit 2 (2^1), üçüncü bit 4 (2^2) ve dördüncü (en soldaki) bit 8 (2^3) ağırlığına sahiptir.

Ondalık rakamlar (0-9) ile bunların ağırlıklı 8421 BCD karşılıkları arasındaki ilişki aşağıdaki tabloda verilmiştir.

Ondalık – BCD Dönüşüm Tablosu

Ondalık (Decimal) SayıBCD (8421) Kodu
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001
10 (1 ve 0)0001 0000
11 (1 ve 1)0001 0001
12 (1 ve 2)0001 0010
\dots\dots

Tablodan da anlaşılabileceği gibi 8421 BCD kodu, her ondalık rakamın 4-bitlik (nibble) saf ikili karşılığı olarak yan yana dizilmesinden başka bir şey değildir.

Onluk Sayıdan BCD’ye Dönüşüm

Ondalık (decimal) bir sayının İkili Kodlanmış Onluk (BCD) sayıya dönüştürülmesi oldukça kolay bir işlemdir. İlk olarak, ondalık sayı rakamlarına ayrıştırılır. Ardından yukarıdaki dönüşüm tablosunu veya 8421 ağırlık kuralını kullanarak her bir rakamı temsil eden eşdeğer 4-bit BCD kodu yazılır.

BCD Dönüşüm Örneği – 1

Yukarıdaki tabloyu kullanarak sırasıyla 85_{10}, 572_{10} ve 8579_{10} ondalık sayılarını 8421 BCD eşdeğerlerine dönüştürelim.

  • 85_{10} \Rightarrow 1000 \quad 0101 \quad (BCD)
  • 572_{10} \Rightarrow 0101 \quad 0111 \quad 0010 \quad (BCD)
  • 8579_{10} \Rightarrow 1000 \quad 0101 \quad 0111 \quad 1001 \quad (BCD)

Bu dönüşüm sonucunda elde edilen ikili sayının, standart onluk-ikili taban dönüştürmesi (sürekli ikiye bölme) yöntemiyle elde edilen sonuçla aynı olmadığına dikkat edin. BCD, sayının bütün değerini değil, rakamların tek tek çevrilmiş halini temsil eder.

İkili Kodlanmış Onluk Sayılardan Onluk Sayıya Dönüşüm

İkili kodlanmış ondalık sayıdan (BCD), tekrar standart ondalık formata dönüşüm işlemi yukarıdaki işlemin tam tersidir. BCD ikili dizisi, en sağdaki bitten (LSB) başlanarak 4 bitlik gruplara (nibble) ayrılır. Daha sonra her bir 4-bitlik grubun ondalık karşılığı yazılarak sayı birleştirilir. En solda kalan bit sayısı 4’e tamamlanamıyorsa, dizinin başına sıfırlar eklenerek 4-bitlik bloklar tamamlanabilir.

BCD Dönüşüm Örneği – 2

Aşağıdaki ikili (BCD) dizileri ondalık eşdeğerlerine dönüştürelim: 1001_2, 1010_2, 1000111_2 ve ondalıklı bir dizi olan 10100111000.101_2.

  • 1001_2 = 1001_{BCD} \Rightarrow 9_{10}
  • 1010_2 \Rightarrow Ondalık değeri 10‘dur ve geçerli bir BCD sayısı olmadığı için hata üretir. BCD sisteminde 1001‘den büyük rakamlar (A, B, C, D, E, F) kullanılamaz.
  • 1000111_2 = 0100 \quad 0111_{BCD} \Rightarrow 47_{10} (Başına sıfır eklenerek 4-bitlik iki grup yapıldı.)
  • 10100111000.101_2 = 0101 \quad 0011 \quad 0001 \ . \ 1010_{BCD} \Rightarrow Burada virgülden sonraki son grup 1010 ondalık 10’a karşılık geldiğinden hata oluşturur. Doğru bir senaryoda eğer BCD olsaydı (Örneğin .0101) kesirli kısımlar olarak okunabilirdi.

BCD sayılarının ondalık sayılara çevrilmesi basittir ancak şunu unutmamak gerekir: BCD formunda yazılmış bir veri, 1’ler ve 0’lardan oluşmasına rağmen aslında salt bir “ikili sayı” değildir; ondalık sistemdeki rakamların dijital gösterimidir. Çoğu insan-makine arayüzü (HMI) ve dijital ekranın onluk tabanda çalışması gerektiği için, bilgisayarlar veriyi bu formata dönüştürerek ekrana yansıtırlar.

BCD Sisteminin Bellek Verimsizliği

BCD kodlama işleminin ve çözümlemesinin kolay olmasına karşın, sayıları bellekte depolamak için verimli bir yöntem değildir. Belirli bir sayıyı BCD formatında saklamak, standart ikili sistemde (saf binary) saklamaya kıyasla her zaman daha fazla bit veya bellek alanı gerektirir.

Örneğin, 0’dan 999’a kadar üç basamaklı bir ondalık sayıyı ikili sistemde (binary) ifade etmek için yalnızca 10 bit (999 = 1111100111_2) yeterliyken, aynı sayıyı BCD formatında saklamak için en az 12 bit (1001 \quad 1001 \quad 1001_{BCD}) kullanmak zorundayız. Bellek boyutlarının kısıtlı olduğu gömülü sistemlerde bu ciddi bir dezavantajdır.

Buna ek olarak, BCD formundaki sayılar üzerinde doğrudan matematiksel işlem (toplama, çıkarma) yapmak karmaşıktır. Çünkü iki sayıyı topladığınızda, sonuç 9‘u (1001_2) geçerse elde edilen değer artık geçersiz bir BCD basamağı (örn: 1010) olur. Bu hatayı düzeltmek için sonuca ekstra algoritmik düzeltme (genellikle +6 veya 0110_2 eklenmesi işlemi) uygulanmalıdır. Bu sebeple bilgisayarlar genellikle matematiksel işlemleri doğrudan “saf ikili” formda yapar, sonucu ekranda gösterecekleri zaman BCD formatına çevirirler.

BCD Entegre Devreleri (7-Segment Gösterge Sürücüleri)

BCD kodlama sisteminin en yaygın ve en kullanışlı olduğu alan, dijital değerlerin 7-Segment (Yedi Bölütlü) LED veya LCD ekranlarda gösterilmesidir. Piyasada doğrudan BCD girişlerini okuyup ekranı sürecek şekilde tasarlanmış çok sayıda popüler entegre devre (IC) bulunmaktadır.

Örneğin sayıcı (counter) devrelerinde kullanılan 74LS90 asenkron sayaç entegresi, bağımsız 2’ye ve 5’e bölme sayaçları içererek 10’a kadar sayabilir ve doğrudan BCD çıkış üretir. Bunun çift versiyonu olan 74LS390 entegresi de benzer şekilde BCD formatında veri çıkışı sağlar.

En yaygın kullanılan donanımlardan bir diğeri ise BCD girişini doğrudan 7-Segment ekrana çeviren Decoder/Driver (Kod Çözücü/Sürücü) entegreleridir. Sayıcıdan (örneğin 74LS90’dan) gelen 4 bitlik BCD kodunu alır ve 7-segment LED ekranın hangi LED çubuklarının yanması gerektiğini belirleyerek sürüş işlemi yapar. 74LS47, ortak anot (common-anode) ekranları sürmek için aktif-düşük (active-low) çıkışlara sahipken, 74LS48 ortak katot (common-cathode) ekranları sürmek için aktif-yüksek (active-high) çıkışlar kullanır.

BCD'den 7-Segment Kod Çözücüye
BCD Kodunun 7-Segment Kod Çözücü (Decoder) ile Gösterilmesi

Özetle İkili Kodlanmış Onluk Sayılar

İkili Kodlanmış Onluk Sayılar, ondalık sayının içindeki her bir rakamın (0’dan 9’a kadar) bağımsız olarak 4-bitlik (bir nibble) ikili eşdeğeriyle temsil edildiği bir dijital kodlama tekniğidir.

Bu sistemde, 0’dan 9’a kadar tek haneli bir sayıyı göstermek için 4 bit (bir nibble) yeterlidir. İki basamaklı (0-99) sayılar için 8 bit (bir bayt), üç basamaklı (0-999) sayılar için 12 bit alan gerekir. Tek bir 8-bitlik (1 bayt) alanın iki ondalık rakamı (00 – 99) yan yana saklayabilmesi durumuna veri sıkıştırma terminolojisinde Paketlenmiş BCD (Packed BCD) adı verilir.

BCD kodu, her bit pozisyonunun belirli bir değere sahip olmasından dolayı ağırlıklı 8421 kodu olarak bilinir. En anlamlı bitten (MSB) en az anlamlı bite (LSB) doğru her bitin ağırlığı sırasıyla 2^3 = 8, 2^2 = 4, 2^1 = 2 ve 2^0 = 1‘dir.

İkili Kodlanmış Onluk (BCD) sisteminin en büyük avantajı, elektronik cihazların hesapladığı değerlerin insanlar tarafından okunabilmesi için onluk sisteme çevrilmesinin çok hızlı ve basit olmasıdır. Ancak geriye kalan 4 bitlik altı kombinasyon (10, 11, 12, 13, 14, 15) kullanılmadığı için bellek kapasitesi açısından saf ikili (pure binary) sisteme göre israf oluşturur. Buna rağmen BCD formatı, özellikle dijital göstergeler (saatler, hesap makineleri, endüstriyel paneller vb.) ve HMI arayüzlerinde yaygın bir şekilde standart olarak kullanılmaya devam etmektedir.

Sayı Sistemleri Serisi
İkili Sayı Sistemiİşaretli İkili Sayılarİkili Kesirler
İkili – Onluk Dönüşümüİkili Kodlanmış Onluk Sayılar (BCD)
On Altılı Sayı SistemiSekizli Sayı Sistemi

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.