İkili kodlu ondalık sayı - Binary-coded decimal

Bir ikili saat kullanabilir LED'ler ikili değerlerini ifade etmek. Bu saatte, LED'lerin her sütunu, geleneksel altmışlık zamanın ikili kodlu bir ondalık rakamını gösterir .

Olarak işlem ve elektronik sistemleri, ikili-kodlanmış ondalık ( BCD ) sınıfıdır ikili kodlanması ondalık her sayı haneli bir sabit sayı ile temsil edilmektedir bit genellikle dört ya da sekiz. Bazen, bir işaret veya diğer göstergeler için özel bit desenleri kullanılır (örn. hata veya taşma).

Olarak bayt sistemleri (diğer bir deyişle, en modern bilgisayar) Odaklı terimi çözdükten ise BCD genellikle, (çoğunlukla bir işaret de dahil olmak üzere) her bir basamağın tam bayt eder paketlenmiş BCD tipik olarak aslında yararlanarak tek bir bayt içinde iki basamak kodlayan dört olduğu bitler, 0 ila 9 aralığını temsil etmek için yeterlidir. Bununla birlikte, kesin 4 bitlik kodlama, teknik nedenlerle değişebilir (örneğin, Aşırı-3 ).

BCD rakamı teşkil eden on durumları bazen adlandırılır tetrades (için yarım bayt genellikle bunları da Tetrade olarak bilinen tutmak için gerekli) kullanılmamış ise, önemli değil -states adlandırılır sözde tetrad (e) s  [ de ] , sözde ondalık sayılar veya sözde ondalık basamaklar .

İkili konumsal sistemlere kıyasla BCD'nin ana erdemi, ondalık miktarların daha doğru temsili ve yuvarlanmasının yanı sıra geleneksel insan tarafından okunabilir temsillere dönüştürülme kolaylığıdır. Başlıca dezavantajları, temel aritmetiği uygulamak için gereken devrelerin karmaşıklığında hafif bir artış ve aynı zamanda biraz daha az yoğun depolamadır.

BCD birçok erken kullanıldı ondalık bilgisayarlar ve bu nedenle makinelerin komut kümesi uygulanan IBM System / 360 serisi ve onun soyundan, Digital Equipment Corporation, 'ın VAX , Burroughs B1700 ve Motorola 68000 SERİSİ işlemciler. BCD başına kadar yaygın geçmişte olduğu gibi kullanılmaz ve artık yeni bilgisayarların talimat setleri (örneğin uygulanan ARM ); x86 desteklemiyor onun BCD talimatlarını içinde uzun modunda artık. Bununla birlikte, ondalık sabit nokta ve kayan nokta biçimleri hala önemlidir ve kayan nokta ikili gösterimlerinin doğasında bulunan ince dönüştürme ve kesirli yuvarlama hatalarının tolere edilemediği mali, ticari ve endüstriyel hesaplamada kullanılmaya devam etmektedir.

Arka plan

BCD, herhangi bir ondalık sayının dört bitlik bir desenle temsil edilebilmesi gerçeğinden yararlanır. Rakamları kodlamanın en belirgin yolu , aşağıdaki tabloda gösterildiği gibi, her ondalık basamağın karşılık gelen dört bitlik ikili değeriyle temsil edildiği Doğal BCD'dir (NBCD). Buna "8421" kodlaması da denir.

ondalık basamak BCD
8 4 2 1
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1

Bu şema ayrıca Basit İkili Kodlu Ondalık ( SBCD ) veya BCD 8421 olarak da adlandırılabilir ve en yaygın kodlamadır. Diğerleri, bitler için kullanılan ağırlıktan sonra adlandırılan "4221" ve "7421" kodlamasını ve " Aşırı-3 " ü içerir . Örneğin, 0110'b8421 notasyonundaki BCD rakamı 6, 1100'b4221'de (iki kodlama mümkündür), 0110'b7421'de, Excess-3'te ise 1001'b( ).

4-bit BCD kodları ve sözde tetrades
Biraz Ağırlık  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15         Yorum Yap        
4 8 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 İkili
3 4 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
2 2 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
İsim 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Ondalık
8 4 2 1 (XS-0) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
7 4 2 1 0 1 2 3 4 5 6   7 8 9          
Aiken (2 4 2 1) 0 1 2 3 4             5 6 7 8 9
Fazla-3 (XS-3) -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12
Fazla-6 (XS-6) -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
Atlama-2 (2 4 2 1) 0 1             2 3 4 5 6 7 8 9
Atlama-8 (2 4 2 1) 0 1 2 3 4 5 6 7             8 9
4 2 2 1 (I) 0 1 2 3     4 5         6 7 8 9
4 2 2 1 (II) 0 1 2 3     4 5     6 7     8 9
5 4 2 1 0 1 2 3 4       5 6 7 8 9      
5 2 2 1 0 1 2 3     4   5 6 7 8     9  
5 1 2 1 0 1 2 3       4 5 6 7 8       9
5 3 1 1 0 1   2 3 4     5 6   7 8 9    
Beyaz (5 2 1 1) 0 1   2   3   4 5 6   7   8   9
5 2 1 1 0 1   2   3   4 5   6   7   8 9
  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Manyetik bant   1 2 3 4 5 6 7 8 9 0          
Paul   1 3 2 6 7 5 4   0     8 9    
Gri 0 1 3 2 7 6 4 5 15 14 12 13 8 9 11 10
Glikson 0 1 3 2 6 7 5 4 9       8      
Ledley 0 1 3 2 7 6 4 5         8   9  
4 3 1 1 0 1   2 3     5 4     6 7   8 9
LARK 0 1   2     4 3 5 6   7     9 8
Klar 0 1   2     4 3 9 8   7     5 6
Petherick (RAE)   1 3 2   0 4     8 6 7   9 5  
O'Brien I (Watt) 0 1 3 2     4   9 8 6 7     5  
5-siklik 0 1 3 2     4   5 6 8 7     9  
ben 0 1 3 2     4     9     8 7 5 6
lippel 0 1 2 3     4     9     8 7 6 5
O'Brien II   0 2 1 4   3     9 7 8 5   6  
Tompkins II     0 1 4 3   2   7 9 8 5 6    
Aşırı-3 Gri -3 -2 0 -1 4 3 1 2 12 11 9 10 5 6 8 7
6 3 -2 -1 (I)         3 2 1 0   5 4 8 9   7 6
6 3 -2 -1 (II) 0       3 2 1   6 5 4   9 8 7  
8 4 -2 -1 0       4 3 2 1 8 7 6 5       9
Lukal 0 15 14 1 12 3 2 13 8 7 6 9 4 11 10 5
Kautz I 0     2   5 1 3   7 9   8 6   4
Kautz II   9 4   1   3 2 8   6 7   0 5  
ben   0   1   4 3 2   9   8 5   6 7
Susskind II   0   1   9   8 4   3 2 5   6 7
  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Aşağıdaki tablo , çeşitli BCD kodlama sistemlerinde 0'dan 9'a kadar olan ondalık basamakları temsil etmektedir . Başlıklarda, " " her bir bitin ağırlığını gösterir. Beşinci sütunda ("BCD 8 4 -2 -1"), ağırlıklardan ikisi negatiftir. Bölgeli BCD örnekleri olan rakamlar için hem ASCII hem de EBCDIC karakter kodları da gösterilmiştir. 8421

 
Hane
BCD
8 4 2 1
Stbitz  kodu veya Aşırı-3 Aiken Kodu veya BCD
2 4 2 1
BCD
8 4 -2 -1
IBM 702 , IBM 705 , IBM 7080 , IBM 1401 8421
ASCII
0000 8421
EBCDIC
0000 8421
0 0000 0011 0000 0000 1010 0011 0000 1111 0000
1 0001 0100 0001 0111 0001 0011 0001 1111 0001
2 0010 0101 0010 0110 0010 0011 0010 1111 0010
3 0011 0110 0011 0101 0011 0011 0011 1111 0011
4 0100 0111 0100 0100 0100 0011 0100 1111 0100
5 0101 1000 1011 1011 0101 0011 0101 1111 0101
6 0110 1001 1100 1010 0110 0011 0110 1111 0110
7 0111 1010 1101 1001 0111 0011 0111 1111 0111
8 1000 1011 1110 1000 1000 0011 1000 1111 1000
9 1001 1100 1111 1111 1001 0011 1001 1111 1001

Çoğu bilgisayar 8 bit baytlık verilerle uğraştığından , bir BCD numarasını kodlamak için aşağıdaki yöntemlerden birini kullanmak mümkündür:

  • Paketlenmemiş : Her ondalık basamak, sayıyı temsil eden dört bit ve kalan bitlerin hiçbir önemi olmayan bir bayta kodlanır.
  • Paketlenmiş : İki ondalık basamak tek bir bayta kodlanır, bir basamak en az anlamlı yarım baytta ( 0 ila 3 bit ) ve diğer sayı en önemli yarım baytta (4 ila 7 bit) bulunur.

Örnek olarak, ondalık sayının 91paketlenmemiş BCD kullanılarak kodlanması , aşağıdaki iki baytlık ikili desenle sonuçlanır:

Decimal:         9         1
Binary : 0000 1001 0000 0001

Paketlenmiş BCD'de aynı sayı tek bir bayta sığar:

Decimal:   9    1
Binary: 1001 0001

Bu nedenle, paketlenmemiş bir BCD baytı için sayısal aralık sıfırdan dokuza kadardır, oysa bir paketlenmiş BCD baytına yönelik aralık sıfırdan doksan dokuza kadardır.

Tek bir bayt aralığından daha büyük sayıları temsil etmek için herhangi bir sayıda bitişik bayt kullanılabilir. Örneğin, büyük endian biçimini 12345kullanarak paketlenmiş BCD'deki ondalık sayıyı temsil etmek için bir program aşağıdaki gibi kodlayacaktır:

Decimal:    0    1    2    3    4    5
Binary : 0000 0001 0010 0011 0100 0101

Burada, en önemli baytın en önemli nibble'ı sıfır olarak kodlanmıştır, bu nedenle sayı olarak depolanır 012345(ancak biçimlendirme rutinleri baştaki sıfırları değiştirebilir veya kaldırabilir). Paketlenmiş BCD, depolama kullanımında paketlenmemiş BCD'den daha verimlidir; aynı sayıyı (baştaki sıfır ile) paketlenmemiş biçimde kodlamak, depolamanın iki katı tüketecektir.

Paketlenmiş bir BCD rakamını paketlemek veya paketini açmak için kaydırma ve maskeleme işlemleri kullanılır. Diğer bitsel işlemler , bir sayıyı eşdeğer bit modeline dönüştürmek veya işlemi tersine çevirmek için kullanılır.

Paketlenmiş BCD

In paketlenmiş BCD (veya basitçe paketlenmiş ondalık ), iki her nibbles her byte bir ondalık basamak temsil eder. Paketlenmiş BCD, en azından 1960'lardan beri kullanılmaktadır ve o zamandan beri tüm IBM ana bilgisayar donanımlarında uygulanmaktadır. Çoğu uygulama büyük endian'dır , yani her bir baytın üst yarısında daha anlamlı basamak ve paketlenmiş ondalık değerin en önemli basamaklarını içeren en soldaki bayt (en düşük bellek adresinde bulunur) ile. En sağdaki baytın alt ucu genellikle işaret bayrağı olarak kullanılır, ancak bazı işaretsiz gösterimlerde işaret bayrağı bulunmaz. Örnek olarak, 4 baytlık bir değer 8 parçadan oluşur, burada üstteki 7 parça, 7 basamaklı bir ondalık değerin rakamlarını depolar ve en düşük yarım parça, ondalık tamsayı değerinin işaretini gösterir.

Standart işaret değerleri, pozitif (+) için 1100 ( hex C) ve negatif (-) için 1101 (D)'dir. Bu kural, EBCDIC karakterleri için bölge alanından ve imzalı üst baskı gösteriminden gelir. İzin verilen diğer işaretler, pozitif için 1010 (A) ve 1110 (E) ve negatif için 1011 (B)'dir. A biti PSW'de ayarlanmışsa, asla geçmeyen ASCII-8 standardı için IBM System/360 işlemcileri 1010 (A) ve 1011 (B) işaretlerini kullanır. Çoğu uygulama, 1111 (F) işaretiyle işaretlenmemiş BCD değerleri de sağlar. ILE RPG, pozitif için 1111 (F) ve negatif için 1101 (D) kullanır. Bunlar, işaret fazlalığı olmayan rakamlar için EBCDIC bölgesiyle eşleşir. Paketlenmiş BCD'de 127 sayısı 0001 0010 0111 1100 (127C) ve −127 sayısı 0001 0010 0111 1101 (127D) ile temsil edilir. Burroughs sistemleri, negatif için 1101 (D) kullandı ve diğer herhangi bir değer, pozitif bir işaret değeri olarak kabul edilir (işlemciler, pozitif bir işareti 1100 (C) olarak normalleştirir).

İşaret
basamağı
BCD
8 4 2 1
İmza Notlar
A 1 0 1 0 +  
B 1 0 1 1 -  
C 1 1 0 0 + Tercihli
NS 1 1 0 1 - Tercihli
E 1 1 1 0 +  
F 1 1 1 1 + imzasız

Bir kelime kaç bayt genişliğinde olursa olsun , her baytta iki tane olduğu için her zaman çift sayıda nibble vardır. Bu nedenle, n baytlık bir kelime en fazla (2 n )−1 ondalık basamak içerebilir , bu her zaman tek bir basamak sayısıdır. d basamaklı bir ondalık sayı gerektirir1/2( d +1) bayt depolama alanı.

Örneğin, 4 baytlık (32 bit) bir sözcük, yedi ondalık basamak artı bir işaret içerebilir ve ±9,999,999 aralığındaki değerleri temsil edebilir. Böylece -1,234,567 sayısı 7 basamak genişliğindedir ve şu şekilde kodlanmıştır:

0001 0010 0011 0100 0101 0110 0111 1101
1    2    3    4    5    6    7    −

Karakter dizileri gibi, paketlenmiş ondalık sayının ilk baytı - en anlamlı iki basamaklı olan - genellikle makinenin sayısından bağımsız olarak bellekteki en düşük adreste saklanır .

Buna karşılık, 4 baytlık ikili ikiye tümleyen tamsayı, -2,147,483,648 ile +2,147,483,647 arasındaki değerleri temsil edebilir.

Paketlenmiş BCD, depolamayı en iyi şekilde kullanmasa da ( aynı sayıları depolamak için ikili gösterimden yaklaşık %20 daha fazla bellek kullanarak ), ASCII , EBCDIC veya çeşitli Unicode kodlamalarına dönüştürme, aritmetik işlemler gerekmediğinden önemsiz hale getirilir. Ekstra depolama gereksinimleri, genellikle, sabit nokta ondalık aritmetiğinin sağladığı hesap makinesi veya elle hesaplama ile doğruluk ve uyumluluk ihtiyacı ile dengelenir. Depolama cezasından kaçınan ve ayrıca ortak dönüştürmeler için aritmetik işlemlere ihtiyaç duymayan daha yoğun BCD paketleri mevcuttur.

Paketlenmiş BCD, COBOL programlama dilinde "COMPUTATIONAL-3" (diğer birçok derleyici satıcısı tarafından benimsenen bir IBM uzantısı) veya "PACKED-DECIMAL" (1985 COBOL standardının bir parçası) veri türü olarak desteklenir. PL/I'de "SABİT ONDALIK" olarak desteklenir . IBM System/360 ve sonraki uyumlu ana bilgisayarların yanı sıra, paketlenmiş BCD, Digital Equipment Corporation'ın orijinal VAX işlemcilerinin yerel komut setinde ve SDS Sigma serisi ana bilgisayarların bazı modellerinde uygulanır ve Burroughs Corporation Orta Sistemleri için yerel formattır. anabilgisayar hattı (1950'lerin Electrodata 200 serisinden türemiştir ).

Negatif sayılar için Ten'in tümleyen temsilleri, paketlenmiş (ve diğer) BCD sayılarının işaretini kodlamak için alternatif bir yaklaşım sunar. Bu durumda, pozitif sayılar her zaman 0 ile 4 (dahil) arasında en anlamlı basamağa sahipken, negatif sayılar karşılık gelen pozitif sayının 10'ların tümleyeni ile temsil edilir. Sonuç olarak, bu sistem 32 bitlik paketlenmiş BCD sayılarının -50.000.000 ila +49,999,999 aralığında olmasına izin verir ve -1, 99999999 olarak temsil edilir. (İkinin tümleyen ikili sayıları gibi, aralık sıfıra göre simetrik değildir.)

Sabit noktalı paketlenmiş ondalık

Sabit noktalı ondalık sayılar bazı programlama dilleri tarafından desteklenir (COBOL, PL/I ve Ada gibi ). Bu diller, programcının rakamlardan birinin önünde örtük bir ondalık nokta belirlemesine izin verir. Örneğin, 12 34 56 7C baytlarıyla kodlanmış bir paketlenmiş ondalık değer, ima edilen ondalık nokta 4. ve 5. basamaklar arasında olduğunda +1,234.567 sabit nokta değerini temsil eder:

12 34 56 7C
12 34.56 7+

Paketlenmiş BCD depolama formatı bunu sağlamadığından ondalık nokta aslında bellekte saklanmaz. Konumu derleyici tarafından basitçe bilinir ve oluşturulan kod çeşitli aritmetik işlemler için buna göre hareket eder.

Daha yüksek yoğunluklu kodlamalar

Bir ondalık basamak dört bit gerektiriyorsa, üç ondalık basamak 12 bit gerektirir. Bununla birlikte, 2 10 (1.024), 10 3'ten (1.000) büyük olduğundan , üç ondalık basamak birlikte kodlanırsa, yalnızca 10 bit gereklidir. Bu tür iki kodlama, Chen-Ho kodlaması ve yoğun paketlenmiş ondalık sayıdır (DPD). İkincisi, kodlamanın alt kümelerinin, normal BCD'de olduğu gibi, optimal yedi bitte iki rakamı ve dört bitte bir rakamı kodlaması avantajına sahiptir.

Bölgeli ondalık

Bazı uygulamalar, örneğin IBM ana bilgisayar sistemleri, bölgelere ayrılmış ondalık sayısal gösterimleri destekler . Her ondalık basamak bir baytta saklanır ve alttaki dört bit basamağı BCD biçiminde kodlar. "Bölge" bitleri olarak adlandırılan üstteki dört bit, baytın basamağa karşılık gelen bir karakter değerini tutması için genellikle sabit bir değere ayarlanır. EBCDIC sistemleri, 1111 (hex F) bölge değerini kullanır; bu, "0" ile "9" arasındaki karakterler için EBCDIC kodları olan F0 ila F9 (hex) aralığında bayt verir. Benzer şekilde, ASCII sistemleri, 30 ila 39 (hex) karakter kodlarını veren 0011 (onaltılık) bir bölge değeri kullanır.

İşaretli bölgeli ondalık değerler için, en sağdaki (en az anlamlı) bölge kemirmesi, işaretli paketlenmiş ondalık sayılar için kullanılanla aynı değer kümesi olan işaret basamağını tutar (yukarıya bakın). Bu nedenle, onaltılı bayt F1 F2 D3 olarak kodlanmış bölgeli bir ondalık değer, işaretli ondalık değeri −123 temsil eder:

F1 F2 D3
1  2 −3

EBCDIC bölgeli ondalık dönüşüm tablosu

BCD rakamı onaltılık EBCDIC karakteri
0+ C0 A0 E0 F0 { (*)   \ (*) 0
1+ C1 A1 E1 F1 A ~ (*)   1
2+ C2 A2 E2 F2 B s S 2
3+ C3 A3 E3 F3 C T T 3
4+ C4 A4 E 4 F4 NS sen sen 4
5+ C5 A5 E5 F5 E v V 5
6+ C6 A6 E6 F6 F w W 6
7+ C7 A7 E7 F7 G x x 7
8+ C8 A8 E8 F8 H y Y 8
9+ C9 A9 E9 F9 ben z Z 9
0– D0 B0     } (*) ^ (*)    
1– D1 B1     J      
2– D2 B2     K      
3– D3 B3     L      
4– D4 B4     m      
5– D5 B5     n      
6– D6 B6     Ö      
7– D7 B7     P      
8– D8 B8     Q      
9– D9 B9     r      

(*) Not: Bu karakterler yerel karakter kodu sayfası ayarına göre değişiklik gösterir .

Sabit noktalı bölgeli ondalık

Bazı diller (COBOL ve PL/I gibi), bir sayının ondalık basamakları arasında bir yerde örtük bir ondalık nokta atayarak, sabit noktalı bölgeli ondalık değerleri doğrudan destekler. Örneğin, dördüncü basamağın sağında bir zımni ondalık nokta bulunan altı baytlık işaretli bölgeli bir ondalık değer verildiğinde, onaltılık bayt F1 F2 F7 F9 F5 C0 +1,279.50 değerini temsil eder:

F1 F2 F7 F9 F5 C0
1  2  7  9. 5 +0

bilgisayarlarda BCD

IBM

IBM , sayıları, büyük harfleri ve özel karakterleri temsil eden 6 bitlik alfasayısal kodlar için İkili Kodlu Ondalık Değişim Kodu (BCDIC, bazen yalnızca BCD olarak adlandırılır) terimlerini kullandı . BCDIC Bazı varyasyon alphamerics dahil olmak üzere en erken IBM bilgisayarlarda, kullanılan IBM 1620 (1959 tanıtılan), IBM 1400 serisi ve olmayan Ondalık Mimarlık üyeleri IBM 700/7000 serisi .

IBM 1400 serisi, her biri B, A, 8, 4, 2 ve 1 olarak etiketlenmiş altı bit , artı bir tek eşlik kontrol biti ( C ) ve bir kelime işareti biti ( M ) olan , karakter adreslenebilir makinelerdir . Basamak kodlayan için 1 ile 9 , B ve A sıfır olduğu ve basamaklı bitleri standart 4 bitlik BCD ile temsil edilen 8 ile 1 . Diğer birçok karakterlerin bitleri için oda ve bir "12", "11" ve "0" "bölgesi zımbalar" den sadece türetilir zımbalı kartlı karakter kodu ve bit 8 ile 1 den 1 ile 9 zımbalar. Bir "12 bölgesi" delme hem de ayarlanmış B ve A , bir "11 bölgesi" grubu B ve bir "0 bölge" (diğerleriyle de birleşebilirler 0 zımba) grubu bir . Böylece delikli kart formatında (12,1) olan A harfi (B,A,1) kodlanmıştır . Delikli karttaki para birimi simgesi $ , (11,8,3) bellekte (B,8,2,1) olarak kodlanmıştır . Bu, devrenin delikli kart formatı ile dahili depolama formatı arasında sadece birkaç özel durumla çok basit hale gelmesine izin verir. Önemli bir özel durum haneli 0 yalnız bir tarafından temsil edilen, 0 kart delgi ve (8,2) çekirdek bellekte.

IBM 1620'nin belleği, bayrak biti olarak kullanılan olağan 8, 4, 2, 1 artı F ve tek bir eşlik kontrol biti olan C olmak üzere 6 bitlik adreslenebilir basamaklar halinde düzenlenmiştir . BCD alfamerikleri , "bölge" çift adresli basamakta ve "hane" tek adresli basamakta olacak şekilde, sayı çiftleri kullanılarak kodlanır; "bölge", 12 , 11 ve 0 "bölge zımbaları" ile ilişkilidir. 1400 serisinde. Dahili rakam çiftleri ve harici standart 6-bit BCD kodları arasında dönüştürülen Giriş/Çıkış çeviri donanımı.

Ondalık Mimari'de IBM 7070 , IBM 7072 ve IBM 7074 alfamerikleri , 10 basamaklı kelimenin basamak çiftleri ( rakamlarda beşte iki kod kullanılarak, BCD değil ) kullanılarak, "bölge" içinde "bölge" ile kodlanır . sol rakam ve sağ rakamdaki "rakam". Dahili rakam çiftleri ve harici standart 6-bit BCD kodları arasında dönüştürülen Giriş/Çıkış çeviri donanımı.

System/360'ın piyasaya sürülmesiyle IBM, 6 bitlik BCD alfameriklerini 8 bitlik EBCDIC'ye genişleterek daha birçok karakterin (örneğin, küçük harfler) eklenmesine izin verdi. Değişken uzunluklu Paketlenmiş BCD sayısal veri türü de uygulanır ve doğrudan paketlenmiş ondalık veriler üzerinde aritmetik gerçekleştiren makine talimatları sağlanır.

On IBM 1130 ve 1800 , paketlenmiş BCD IBM'in Ticari Altrutin Paketi ile yazılımda desteklenmektedir.

Bugün, BCD verileri, IBM DB2 , anabilgisayarlar ve Power6 gibi IBM işlemcilerinde ve veritabanlarında hâlâ yoğun bir şekilde kullanılmaktadır . Bu ürünlerde, BCD genellikle bölgeli BCD (EBCDIC veya ASCII'de olduğu gibi), Paketlenmiş BCD (bayt başına iki ondalık basamak) veya "saf" BCD kodlamasıdır (her baytın düşük dört bitinde BCD olarak depolanan bir ondalık basamak) . Bunların tümü, donanım kayıtları ve işlem birimlerinde ve yazılımda kullanılır. EBCDIC tablosu boşaltmalarındaki paketlenmiş ondalık sayıları okunabilir sayılara dönüştürmek için, JCL yardımcı programı DFSORT'un OUTREC FIELDS maskesini kullanabilirsiniz.

Diğer bilgisayarlar

Digital Equipment Corporation VAX-11 serisi, doğrudan paketlenmiş BCD verileri üzerinde aritmetik gerçekleştirebilen ve paketlenmiş BCD verileri ile diğer tamsayı gösterimleri arasında dönüştürme yapabilen yönergeler içerir . VAX'in paketlenmiş BCD formatı, IBM System/360 ve IBM'in sonraki uyumlu işlemcileri ile uyumludur. MicroVAX ve sonraki VAX uygulamaları, bu yeteneği CPU'dan kaldırdı, ancak işletim sistemi tarafından sağlanan bir yazılım kitaplığındaki eksik talimatları uygulayarak önceki makinelerle kod uyumluluğunu korudu. Bu, geçersiz talimatlarla karşılaşıldığında istisna işleme yoluyla otomatik olarak çağrılır , böylece bunları kullanan programlar daha yeni makinelerde değişiklik yapmadan çalışabilir.

Intel x86 mimarisi destekleyen benzersiz 18 haneli (on bayt) BCD formatında yüklenir ve hesaplamalar yapılabilir yerden kayan nokta kayıtlardan elde saklanabilir.

Motorola 68000 serisi BCD talimatları vardı.

Daha yeni bilgisayarlarda bu tür yetenekler neredeyse her zaman CPU'nun komut setinden ziyade yazılımda uygulanmaktadır, ancak BCD sayısal verileri ticari ve finansal uygulamalarda hala oldukça yaygındır. Kısa ama anlaşılması zor sözcük-paralel mantık ve ikili aritmetik işlem dizilerini kullanarak paketlenmiş BCD ve bölgeli ondalık toplama veya çıkarma işlemlerini uygulamak için püf noktaları vardır. Örneğin, aşağıdaki kod ( C ile yazılmış ), 32 bit ikili işlemleri kullanarak işaretsiz 8 basamaklı paketlenmiş BCD eklemesini hesaplar:

uint32_t BCDadd(uint32_t a, uint32_t b)
{
    uint32_t t1, t2;    // unsigned 32-bit intermediate values

    t1 = a + 0x06666666;
    t2 = t1 ^ b;                   // sum without carry propagation
    t1 = t1 + b;                   // provisional sum
    t2 = t1 ^ t2;                  // all the binary carry bits
    t2 = ~t2 & 0x11111110;         // just the BCD carry bits
    t2 = (t2 >> 2) | (t2 >> 3);    // correction
    return t1 - t2;                // corrected BCD sum
}

elektronikte BCD

Sayısal bir değerin görüntülenmesi gereken elektronik sistemlerde, özellikle yalnızca dijital mantıktan oluşan ve mikroişlemci içermeyen sistemlerde BCD çok yaygındır. BCD kullanılarak, gösterim için sayısal verilerin manipülasyonu, her bir basamağın ayrı bir tek alt devre olarak ele alınmasıyla büyük ölçüde basitleştirilebilir. Bu, ekran donanımının fiziksel gerçekliğiyle çok daha yakından eşleşir; örneğin bir tasarımcı , bir ölçüm devresi oluşturmak için bir dizi ayrı özdeş yedi segmentli ekran kullanmayı seçebilir . Sayısal miktar saf ikili olarak depolanmış ve manipüle edilmiş olsaydı, böyle bir ekranla arayüz oluşturmak karmaşık devreler gerektirecektir. Bu nedenle, hesaplamaların nispeten basit olduğu durumlarda, baştan sona BCD ile çalışmak, ikiliye ve ikili dosyadan dönüştürmeye göre genel olarak daha basit bir sisteme yol açabilir. Çoğu cep hesaplayıcısı tüm hesaplamalarını BCD'de yapar.

Aynı argüman, bu tür bir donanım yerleşik bir mikro denetleyici veya başka bir küçük işlemci kullandığında da geçerlidir. Sayıları dahili olarak BCD biçiminde temsil etmek, daha küçük kodla sonuçlanır, çünkü ikili gösterimden veya ikili gösterime dönüştürme bu tür sınırlı işlemcilerde pahalı olabilir. Bu uygulamalar için, bazı küçük işlemciler, BCD miktarlarını manipüle eden rutinleri yazarken yardımcı olan özel aritmetik modlara sahiptir.

BCD ile işlemler

Ek

İlk önce ikili olarak ekleyerek ve ardından BCD'ye dönüştürerek toplama yapmak mümkündür . İki basamağın basit toplamının dönüştürülmesi, bir çift basamak eklemenin beş bitlik sonucu 9'dan büyük olduğunda, 6 (yani, 16 − 10) ekleyerek yapılabilir. 16 olası 4-bit BCD değeri (2 4 = 16'dan beri ), ancak yalnızca 10 değer geçerlidir (0000 ila 1001). Örneğin:

1001 + 1000 = 10001
   9 +    8 =    17

10001, istenen sonucun ondalık değil ikili gösterimidir, ancak en anlamlı 1 ("taşıma") 4 bitlik bir ikili sayıya sığamaz. BCD'de ondalık olarak olduğu gibi, basamak başına 9'dan (1001) büyük bir değer olamaz. Bunu düzeltmek için toplama 6 (0110) eklenir ve ardından sonuç iki kemirme olarak değerlendirilir:

10001 + 0110 = 00010111 => 0001 0111
   17 +    6 =       23       1    7

Sonucun iki ucu, 0001 ve 0111, "1" ve "7" rakamlarına karşılık gelir. Bu, doğru sonuç olan BCD'de "17" verir.

Bu teknik, gruplar halinde sağdan sola ekleyerek, ikinci basamağı bir taşıma olarak yayarak, her bir basamak çifti toplamının 5 bitlik sonucunu her zaman 9 ile karşılaştırarak birden fazla basamak eklemeye genişletilebilir. Bazı CPU'lar yarım taşıma bayrağı sağlar. ikili toplama ve çıkarma işlemlerini takiben BCD aritmetik ayarlamalarını kolaylaştırmak için. Z80 CPU, işlem kodu DAA, Ondalık Ayar Akümülatörü, DAA sağlar

Çıkarma

Çıkarma Bu on tümleyenini ekleyerek yapılır çıkanın için Eksilen . BCD'de bir sayının işaretini temsil etmek için, pozitif bir sayıyı temsil etmek için 0000 sayısı ve negatif bir sayıyı temsil etmek için 1001 sayısı kullanılır . Kalan 14 kombinasyon geçersiz işaretlerdir. İşaretli BCD çıkarmayı göstermek için aşağıdaki problemi göz önünde bulundurun: 357 − 432.

İşaretli BCD'de 357, 0000 0011 0101 0111'dir. 432'nin on'un tümleyeni , 432'nin dokuzun tümleyeni alınarak ve ardından bir eklenerek elde edilebilir. Böylece, 999 − 432 = 567 ve 567 + 1 = 568. BCD'de 568'den önce eksi işaret koduyla −432 sayısı gösterilebilir. Yani, işaretli BCD'deki −432, 1001 0101 0110 1000'dir.

Artık her iki sayı da imzalı BCD'de temsil edildiğine göre, birlikte toplanabilirler:

  0000 0011 0101 0111
  0    3    5    7
+ 1001 0101 0110 1000
  9    5    6    8
= 1001 1000 1011 1111
  9    8    11   15

BCD bir ondalık gösterim biçimi olduğundan, yukarıdaki basamak toplamlarından birkaçı geçersizdir. Geçersiz bir giriş (1001'den büyük herhangi bir BCD basamağı) olması durumunda, bir taşıma biti oluşturmak ve toplamın geçerli bir giriş olmasını sağlamak için 6 eklenir. Bu nedenle, geçersiz girişlere 6 eklenmesi aşağıdakilerle sonuçlanır:

  1001 1000 1011 1111
  9    8    11   15
+ 0000 0000 0110 0110
  0    0    6    6
= 1001 1001 0010 0101
  9    9    2    5

Böylece çıkarmanın sonucu 1001 1001 0010 0101 (−925) olur. Sonucu doğrulamak için, ilk hanenin negatif anlamına gelen 9 olduğuna dikkat edin. Bu doğru görünüyor, çünkü 357 - 432 negatif bir sayı ile sonuçlanmalıdır. Kalan nibbles BCD'dir, dolayısıyla 1001 0010 0101 925'tir. 925'in on'un tümleyeni 1000 − 925 = 75'tir, dolayısıyla hesaplanan cevap −75'tir.

Birbirine eklenen farklı sayıda nibble varsa (1053 − 2 gibi), daha az basamaklı sayının önüne, on'un tümleyeni alınmadan veya çıkarılmadan önce sıfırlar eklenmelidir. Bu nedenle, 1053 − 2 ile 2'nin önce BCD'de 0002 olarak temsil edilmesi ve onun 0002'nin tümleyeninin hesaplanması gerekir.

Saf ikili ile karşılaştırma

Avantajlar

  • Ondalık 0.2 gibi pek çok integral olmayan değer, ikili sistemde (.001100110011...) sonsuz bir basamak değeri temsiline sahiptir, ancak ikili kodlu ondalık sistemde (0.0010) sonlu bir basamak değerine sahiptir. Sonuç olarak, ondalık kesirlerin ikili kodlu ondalık gösterimlerine dayanan bir sistem, bu tür değerleri temsil eden ve hesaplayan hataları önler. Bu, finansal hesaplamalarda yararlıdır.
  • 10'luk bir güçle ölçekleme basittir.
  • Ondalık basamak sınırında yuvarlama daha basittir. Ondalık sayılarda toplama ve çıkarma işlemi yuvarlama gerektirmez.
  • İki ondalık sayının hizalanması (örneğin 1.3 + 27.08) basit, tam bir kaydırmadır.
  • Bir karakter biçimine veya görüntüleme için (örneğin, XML gibi metin tabanlı bir biçime veya yedi bölümlü bir gösterim için sinyalleri yönlendirmek için ) dönüştürme, basamak başına basit bir eşlemedir ve doğrusal olarak yapılabilir ( O ( n ) )) zaman. Saf ikiliden dönüştürme, rakamları kapsayan nispeten karmaşık bir mantık içerir ve büyük sayılar için doğrusal zaman dönüştürme algoritması bilinmez (bkz. İkili sayı sistemi § Diğer sayı sistemlerine ve diğer sayı sistemlerine dönüştürme ).

Dezavantajları

  • Bazı işlemlerin uygulanması daha karmaşıktır. Toplayıcılar , onları erken sarmak ve bir taşıma oluşturmak için ekstra mantığa ihtiyaç duyar. Saf ikiliye kıyasla BCD add için yüzde 15 ila 20 daha fazla devre gereklidir. Çarpma, kaydırma-maske-eklemeden biraz daha karmaşık algoritmaların kullanılmasını gerektirir (ikili kaydırmalar ve toplamalar veya eşdeğeri, basamak başına veya basamak grubu gerektiren bir ikili çarpma gereklidir).
  • Standart BCD, basamak başına dört bit, ikili kodlamadan kabaca yüzde 20 daha fazla alan gerektirir (4 bitin log 2 10 bit'e oranı 1.204'tür). Üç basamak on bit olarak kodlanacak şekilde paketlendiğinde, mevcut donanımda yaygın olan 8 bitlik bayt sınırları ile hizalanmayan bir kodlama pahasına depolama ek yükü büyük ölçüde azalır ve bu sistemlerde daha yavaş uygulamalara neden olur.
  • BCD'nin mevcut pratik uygulamaları, yerel BCD işlemleri için sınırlı işlemci desteği nedeniyle, özellikle gömülü sistemlerde ikili gösterimlerdeki işlemlerden tipik olarak daha yavaştır.

temsili varyasyonlar

Sayılar için başka temsiller kullanan çeşitli BCD uygulamaları mevcuttur. Texas Instruments , Hewlett-Packard ve diğerleri tarafından üretilen programlanabilir hesap makineleri , tipik olarak (ondalık) üs için tipik olarak iki veya üç basamaklı bir kayan noktalı BCD formatı kullanır . İşaret basamağının ekstra bitleri, sonsuzluk , yetersiz / taşma ve hata (yanıp sönen bir ekran) gibi özel sayısal değerleri belirtmek için kullanılabilir .

imzalı varyasyonlar

İşaretli ondalık değerler çeşitli şekillerde temsil edilebilir. COBOL farklı bir şekilde sayısal işareti kodlayan her biri ile programlama dili, örneğin, destekleri beş zonlu ondalık formatları:

Tip Açıklama Örnek
imzasız Hiçbir iz kemirmek F1 F2 F3
İmzalı sonda (kurallı biçim) Son (en az önemli) bayttaki nibble'ı işaretle F1 F2 C3
İmzalı lider (overpunch) İlk (en önemli) baytta nibble'ı işaretle C1 F2 F3
İmzalı sondaki ayrı Rakam baytlarından sonra ayrı işaret karakteri baytı ( '+'veya '−') F1 F2 F3 2B
İmzalı lider ayrı Rakam baytlarından önce ayrı işaret karakteri baytı ( '+'veya '−') 2B F1 F2 F3

Telefon ikili kodlu ondalık sayı (TBCD)

3GPP tarafından geliştirilen TBCD , kalan (kullanılmayan) bit kombinasyonlarının, telefon tuş takımlarının orijinal tasarımında bulunanlara benzer rakamlarla belirli telefon karakterleri eklemek için kullanıldığı BCD'ye bir genişleme .

ondalık
basamak
TBCD
8 4 2 1
* 1 0 1 0
# 1 0 1 1
a 1 1 0 0
B 1 1 0 1
C 1 1 1 0
Tek sayıda basamak olduğunda dolgu olarak kullanılır 1 1 1 1

Bahsedilen 3GPP belgesi, TBCD-STRING'i her baytta değiştirilen nibbles ile tanımlar . 1'den indekslenen bitler, sekizli ve rakamlar, sağdan bitler, soldan rakamlar ve sekizli.

sekizli n'nin 8765 biti 2 n rakamını kodlama

sekizli n kodlama basamağının 4321 biti 2( n – 1) + 1

Anlamı sayı 1234, 21 43TBCD'de olur.

Alternatif kodlamalar

Gösterim ve hesaplamadaki hatalar, gösterime ve gösterimden dönüştürme hızından daha önemliyse, bir ondalık sayıyı ikili olarak kodlanmış bir tamsayı ve ikili olarak kodlanmış bir işaretli ondalık üs olarak saklayan, ölçekli bir ikili gösterim kullanılabilir. Örneğin 0.2, 2 × 10 1 olarak gösterilebilir .

Bu gösterim hızlı çarpma ve bölmeye izin verir, ancak ondalık noktaları hizalamak için toplama ve çıkarma sırasında 10'luk bir güçle kaydırma gerektirebilir. Daha sonra bu ayarlamayı gerektirmeyen sabit sayıda ondalık basamağa sahip uygulamalar için uygundur - özellikle ondalık noktadan sonra 2 veya 4 hanenin genellikle yeterli olduğu finansal uygulamalar. Aslında, bu neredeyse bir sabit nokta aritmetiği biçimidir, çünkü taban noktasının konumu ima edilir.

Hertz ve Chen-Ho kodlamalar ve etkili bir şekilde sadece 2 ya da 3 kapı gecikme ile donanım kodlanabilir 10-bit değerleri üç BCD-kodlanmış dijit grupları dönüştürmek için Boole dönüşümler bulunur. Yoğun paketlenmiş ondalık sayı (DPD), IEEE 754-2008 kayan nokta standardında belirtilen iki alternatif ondalık kodlamadan biri için ön basamak hariç, çoğu anlamlı için kullanılan benzer bir şemadır .

Başvuru

BIOS birçok kişisel bilgisayarlar çünkü mağazalarda BCD tarih ve saat MC6818 orijinal kullanılan gerçek zamanlı saat yongası IBM PC AT BCD kodlanmış zaman sağlanan anakart. Bu form, görüntüleme için kolayca ASCII'ye dönüştürülür.

Atari 8-bit ailesi bilgisayarların kayan nokta algoritmaları uygulamak için BCD kullandı. MOS 6502 işlemci toplama ve çıkarma talimatı etkileyen bir BCD modu vardır. Psion Organizer 1 el bilgisayarın üreticisi tarafından sağlanan yazılım da tamamen kayan nokta uygulamak için BCD kullanılan; daha sonra Psion modelleri yalnızca ikili olarak kullanıldı.

PlayStation 3'ün ilk modelleri tarih ve saati BCD'de saklar. Bu, 1 Mart 2010'da dünya çapında konsolun hizmet dışı kalmasına neden oldu. BCD olarak saklanan yılın son iki basamağı , ünitenin tarihinde bir hataya neden olarak 16 olarak yanlış yorumlandı ve çoğu işlevi çalışmaz hale getirdi. Bu, 2010 Yılı Sorunu olarak anılmıştır .

Hukuk tarihi

1972'deki Gottschalk v. Benson davasında , ABD Yüksek Mahkemesi, bir alt mahkemenin , BCD kodlu sayıları bir bilgisayarda ikiliye dönüştürmek için bir patente izin veren kararını bozdu . Kararda, bir patentin "matematiksel formülü tamamen önleyeceği ve pratikte algoritmanın kendisinin patenti olacağı " belirtildi. Bu, yazılım ve algoritmaların patentlenebilirliğini belirleyen önemli bir karardı.

Ayrıca bakınız

Notlar

Referanslar

daha fazla okuma

Dış bağlantılar