BCD kodu

BCD (Binary Coded Decimal) kodu, bilgisayar ve elektronik sistemlerinde onluk tabandaki (decimal) sayıların ikilik tabana (binary) dönüştürülmesi için kullanılan sayısal kodlama metodudur. Bu dönüştürme işlemi yapılırken öncelikle sayının her bir basamağı tek tek ikilik tabana (genellikle dört veya sekiz bit ile ifade edilir ancak farklı uzunluklarda da olabilir) çevrilir ve ardından her basamağın karşılık geldiği binary değerler sırasıyla birleştirilerek sayının BCD Kodu ile gösterimi elde edilir.

Bir bilgisayar için en doğal sistem ikili sistem olmasına rağmen, çoğu insan ondalık sisteme daha alışkındır. BCD Kodu'nun en büyük avantajı da elektronik sistemlerde BCD ile kodlanmış olarak kullanılan ikilik tabandaki sayıların insanlar tarafından kolaylıkla anlaşılıp onluk sisteme çevrilebilmesidir.

BCD Kodu günümüzde eskisi kadar yaygın olarak kullanılmamakla birlikte geçmişte onluk sistemi kullanan (decimal computer) bilgisayarlarda yaygın olarak kullanılmıştır. Günümüzde de tam sayı veya ondalıklı sayı işlemlerinin önemli olduğu finans, sanayi ve ticaret gibi alanlardaki sistemlerde kullanılmaktadır.

Genişletilmiş (Uncompressed) BCD: Onluk tabandaki sayının her basamağı 1 byte ile gösterilir. Gösterimin ilk 4 biti herhangi bir büyüklüğü ifade etmezken, son 4 biti sayının ikili tabandaki gösterimine eşittir.

Sıkıştırılmış (Packed) BCD: Onluk tabandaki sayının her iki basamağı 1 byte ile gösterilir. İlk 4 bit (0-3) en anlamsız kısım (the least significant nibble), diğer 4 bit en anlamlı kısım (the most significant nibble) olarak adlandırılır.

BCD sayısal bir değerin gösterildiği ve özellikle sayısal mantığa dayalı elektronik sistemlerde oldukça yaygındır. BCD sayesinde, sayısal bir veride değişim yapmak oldukça kolay bir hal alır. Çünkü her rakam ayrı bir alt devre gibi incelenir. Eğer sayısal değerler yalnızca ikilik tabanda depolanıyor ve değiştiriliyorsa, böyle bir displayi arayüzlemek daha karmaşık bir devre gerektirir. Bu nedenle, bazı hesaplamalarda ikilik sisteme çevirmek yerine BCD koduna çevirmek daha basit ve kolaydır.

Gömülü bir mikrodenetleyici ve diğer işlemciler kullanıldığında da aynı teknik uygulanır. Genellikle kısa kodlar, ikilik tabandaki bir sayıyı BCD formatına çevirmek masraflı bir işlem olduğu için kısıtlı kapasitede işlemcilerin oluşmasına neden olurlar.

İki basamağın her birinin 8 bitte kodlanmasına sıkıştırılmış BCD (packed BCD ya da packed decimal) denir. Sıkıştırılmış BCD 1960'lardan bu yana kullanılmaya başlanmıştır ve bütün IBM merkezi işlemci donanımlarda uygulanmıştır. Çoğu gösterimde bir ya da iki bayt on tabanında bir tam sayıyı ifade eder. Her bir baytta iki tane dörtlü bit (İngilizce'de nibble olarak ifade edilir.) vardır, bu dörtlü bitlerin her biri bir onluk tabandaki rakamı gösterir. En üstteki(hafızadaki adresi üstte olan) dörtlü en anlamlı, diğer dörtlü ise en anlamsız basamak şeklinde adlandırılır. En sağdaki baytın en anlamsız dörtlüsü genellikle işareti gösterir. Örneğin, 4 baytlık bir değer 8 tane dörtlü içerir. En üstteki 7 dörtlü), 7 rakamlı onluk tabandaki değerin rakamlarını hafızada tutar ve en alttaki dörtlü onluk tam sayı değerinin işaretini gösterir.

Standart işaret değerleri pozitifler için 1100 (on altılık tabanda C) ve negatifler için 1101 (on altılık tabanda D)'dir. On altılık tabandaki bu kısaltmalar C için Credit, D için Debit'ten gelir, bunun nedeni sıkıştırılmış BCD'nin muhasebede yaygın olarak kullanılmasından kaynaklanır. Ayrıca pozitif sayılarda 1010 (A), 1110 (E) ve negatif sayılarda 1011 (B) işaretleri de bulunmaktadır. 127 sayısı sıkıştırılmış BCD'de 0001 0010 0111 1100 (127C) şeklinde, -127 sayısı ise 0001 0010 0111 1101 (127D) olarak gösterilir.

Bir bit dizisi ne kadar uzun olursa olsun her zaman çift sayıda dörtlü vardır çünkü her bir baytta 2 dörtlü vardır. Bu nedenle, bir n uzunluğunda bit dizisi en fazla (2n-1) tane onluk tabanda rakam (rakam sayısı tek sayıda olacak şekilde) içerebilir. d basamaklı bir onlu sayı 1/2(d+1) baytlık bir hafıza alanını kaplar.

Sıkıştırılmış BCD bellek kullanımı açısından çok verimli olmamasına karşın ASCII, EBCDIC, veya Unicode'un diğer kodlama çeşitleri aritmetik işlemler gerektirdiği için çok kullanılmaz.

Ayrılmış onlu sayısal gösteriminde onluk tabandaki her rakamın en alttaki dört biti bellekte bir baytlık alanda saklanır. En üstteki dört bit ise ayrılmış bitler olarak ifade edilir ve genellikle sabit bir değere ayarlanır, böylece saklanan baytta rakamı ifade eden bir karakter değeri tutulur. EBCDIC sistemleri 1111 ayrılmış değerini kullanırlar. Bu değer EBCDIC kodunda 0'dan 9'a kadar kadar herhangi bir karakter değerini alabilir. Aynı şekilde ASCII'de de 0011 ayrılmış değeri kullanılır. Bu ayrılmış değer on altılık tabanda 30'dan 39'a kadar olan karakterleri ifade eder.

Bu yöntem birden fazla rakamın toplanması durumu için de geçerlidir. Böyle bir durumda gruplar toplanarak sağdan sola doğru gidilir ve toplamın 2.basamağı elde olarak tutulur. Sonucun her biti için 9 olup olmadığı kontrol edilir.

Çıkarma işlemi, eksilene çıkarılanın ona tümleyeni(ten's complement) eklenerek yapılır. BCD ile sayıların işareti gösterilirken; pozitif sayılar için 0000, negatif sayılar için 1001 kullanılır (diğer 14 ihtimal işaret açısından bir anlam taşımaz).

Bulunan 1001 1001 0010 0101 değeri işaretli gösterimde -925 değerine eşittir. 925 sayısının ona tümleyeni ise 999 - 925 = 74, ve 74 + 1 = 75'tir. Sonuç olarak 357 - 432 = -75 şeklinde BCD kullanılarak doğru hesaplanmıştır.

Farklı basamak uzunluğuna sahip sayılarda çıkarma işlemi yapılırken basamak sayısı az olanın önüne 0 eklenir. Örneğin, 1053 - 122 işlemi yapılırken 0122 sayısının ona tümleyeni eksilene eklenerek çıkarma işlemi yapılır.

Tabloda da belirtildiği gibi başka yöntemler de olmasına rağmen, BCD en çok kullanılan kodlama biçimidir. Tabloda BCD yöntemi BCD 8421 olarak gösterilmektedir. Burada 8421 her bir bitin ağırlığını ifade eder. Ayrıca 5.sütunda bu dört basamağın ikisinin negatif olduğuna dikkat ediniz. Tabloda gösterilmiş olan ASCII ve EBCDIC karakter kodlarının her ikisi de ayrılmış BCD'nin birer örneğidir.

- BCD kodlama ikilik sistemden daha verimsizdir. Örneğin, (10)10 sayısını gösterebilmek için BCD'de 8 bit gerekirken binary sistemde 4 bit yeterlidir.