Anda di halaman 1dari 9

Binary-coded decimal

Dalam komputasi dan elektronik, sistem kode biner-desimal (BCD) (kadang-kadang disebut alam kode
biner-desimal, NBCD) adalah encoding untuk angka desimal di mana setiap digit diwakili oleh urutan
biner sendiri. Kebaikan yang utama adalah bahwa hal itu memungkinkan mudah konversi ke angka
desimal untuk pencetakan atau tampilan dan cepat perhitungan desimal. Its drawbacks adalah
peningkatan kerumitan sirkuit yang diperlukan untuk melaksanakan operasi matematis dan yang relatif
tidak efisien encoding-it menduduki lebih banyak daripada yang murni representasi biner.

Dalam BCD, angka yang biasanya diwakili oleh empat bit yang pada umumnya, mewakili nilai-nilai /
angka / karakter 0-9. Sedikit kombinasi lainnya kadang-kadang digunakan untuk tanda atau indikasi
lainnya.

BCD meskipun tidak banyak digunakan sebagai sekali karena itu, tetap desimal dan floating-point-
point penting dan masih terus digunakan dalam keuangan, komersial, dan industri komputer. [1]
Modern desimal floating-point menggunakan dasar pernyataan-10 exponents, namun tidak BCD
encodings. Peristiwa hardware implementasi Namun, mengkonversikan dikompresi encodings desimal
ke BCD internal sebelum melaksanakan computations. Implementasi menggunakan perangkat lunak
atau beberapa BCD 10n dasar lainnya, tergantung pada operasi.

Basics

BCD-encode ke desimal menggunakan encoding umum, masing-masing angka desimal disimpan


dalam empat-bit menggigit.

Desimal: 0 1 2 3 4 5 6 7 8 9
BCD: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001

Dengan demikian, BCD encoding untuk nomor 127 akan:

0001 0010 0111

Karena kebanyakan komputer menyimpan data dalam delapan-bit byte, ada dua cara umum untuk
menyimpan empat-bit BCD angka yang byte:

* Masing-masing angka ini akan disimpan dalam satu mengutil dari byte, dengan yang lainnya
mengunggis menetapkan angka nol untuk semua, semua orang (seperti pada kode EBCDIC), atau ke
0011 (seperti pada kode ASCII)
* Dua digit akan disimpan di setiap byte.

Tidak seperti binary-encoded angka, BCD-encoded nomor mudah pemetaan ditampilkan oleh masing-
masing nibbles ke karakter yang berbeda. Mengkonversi binary-encoded sebuah nomor ke desimal
untuk ditampilkan sangat sulit, karena hal ini umumnya melibatkan perkalian integer atau membagi
operasi. BCD juga untuk menghindari masalah dimana pecahannya yang dapat diwakili dalam desimal
justru tidak dapat di biner (misalnya, satu-kesepuluh).
BCD di Elektronik

BCD sangat umum dalam sistem elektronik di mana nilai numerik yang akan ditampilkan, terutama
dalam sistem hanya terdiri dari logika digital, dan tidak mengandung sebuah microprocessor. Dengan
memanfaatkan BCD, maka manipulasi data numerik untuk menampilkan dapat sangat disederhanakan
oleh memperlakukan setiap angka yang terpisah sebagai satu sub-sirkuit. Cocok ini lebih dekat dengan
kenyataan dari tampilan fisik hardware-desainer yang dapat memilih untuk menggunakan rangkaian
terpisah identik 7-segmen display untuk membangun metering circuit, misalnya. Jika angka kuantitas
yang disimpan dan dimanipulasi sebagai biner murni, interfacing seperti itu akan menampilkan
memerlukan circuitry kompleks. Oleh karena itu, dalam kasus di mana perhitungan relatif sederhana
bekerja dengan seluruh BCD dapat mengakibatkan keseluruhan sistem yang lebih sederhana daripada
konversi ke biner.

Argumen yang sama berlaku bila perangkat keras dari jenis ini menggunakan Microcontroller tertanam
prosesor kecil atau lainnya. Seringkali, ketika kecil kode hasil mewakili nomor internal dalam format
BCD, sejak konversi dari atau ke perwakilan biner dapat mahal pada prosesor terbatas. Untuk aplikasi
ini, beberapa fitur kecil prosesor BCD aritmatika mode, yang membantu saat menulis rutinitas yang
memanipulasi BCD kuantitas.

Packed BCD

J banyak digunakan variasi dari dua digit per byte encoding disebut dikemas BCD (atau cukup dikemas
desimal). Seluruh byte dari atas multi-byte kata plus atas empat bit (mengutil) dari byte terendah yang
digunakan untuk menyimpan desimal integers. Semakin rendah empat bit dari byte terendah digunakan
sebagai tanda bendera. Sebagai contoh, sebuah kata berisi 32 bit atau 4 byte nibbles 8. Packed BCD
menggunakan atas 7 nibbles untuk menyimpan integers dari desimal dan menggunakan nilai terendah
untuk menunjukkan mengunggis tanda yang integers.

Tanda standar nilai 1100 (Ch) untuk positif (+) dan 1101 (Dh) untuk negatif (-). Tanda-tanda yang
lainnya boleh 1010 (Ah) dan 1110 (Eh) untuk positif dan 1011 (Bh) untuk negatif. Beberapa
implementasi juga memberikan nilai unsigned BCD dengan tanda mengunggis dari 1111 (FH).
Dikemas dalam BCD, jumlah yang diwakili oleh 127 "0001 0010 0111 1100" (127Ch) dan -127 yang
diwakili oleh "0001 0010 0111 1101 (127Dh).

Sign BCD Sign Notes


Digit 8421
A 1010 +
B 1011 -
C 1100 + Preferred
D 1101 - Preferred
E 1110 +
F 1111 + Unsigned

Tidak peduli berapa banyak byte adalah sebuah kata, selalu ada sebuah bahkan jumlah nibbles karena
setiap byte mempunyai dua dari mereka. Karena itu, kata n byte yang dapat berisi hingga (2n) -1 angka
desimal, yang selalu yang aneh jumlah digit. J desimal nomor dengan angka memerlukan ½ d (d +1)
byte ruang.

Misalnya, empat-byte (32bit) kata dapat terus tujuh angka desimal tanda plus, dan dapat mewakili nilai-
nilai mulai dari ± 9.999.999. Dengan demikian jumlah -1234567 adalah 7 digit lebar dan encoded
sebagai:
0001 0010 0011 0100 0101 0110 0111 1101
1 2 3 4 5 6 7 -

(Perlu diketahui bahwa, seperti karakter string, pertama byte yang dikemas desimal - yang paling
penting dua digit - yang biasanya disimpan di dalam memori terendah alamat, independen dari
endianness dari mesin).

Sebaliknya, empat-byte biner dari dua melengkapi dapat mewakili nilai integer dari -2147483648 ke
2147483647.

Walaupun dikemas BCD tidak membuat optimal penggunaan penyimpanan (sekitar 1 / 6 dari memori
yang digunakan adalah-siakan), konversi ke ASCII, EBCDIC, atau dari berbagai encodings Unicode
masih sepele, seperti operasi aritmatika tidak diperlukan. Penyimpanan ekstra persyaratan biasanya
diimbangi oleh kebutuhan akan keakuratan yang tetap-titik desimal aritmatika menyediakan. BCD dari
Denser packings ada yang menghindari hukuman penyimpanan dan juga tidak memerlukan operasi
aritmatika untuk umum konversi.

Fixed-point packed decimal


Fixed-point desimal nomor didukung oleh beberapa bahasa pemrograman (seperti COBOL dan PL / I),
dan memberikan titik desimal implisit di depan salah satu digit. Misalnya, nilai desimal encoded
dikemas dengan byte 12 34 56 7C mewakili tetap titik-nilai +1234.567 bila diterapkan titik desimal
terletak antara ke-4 dan 5. Digit.
12 34 56 7C
12 34.56 7+

Higher-density encodings
Jika memerlukan empat angka desimal bit, maka tiga angka desimal memerlukan 12 bit. Namun, sejak
210 (1024) lebih besar dari 103 (1000), jika tiga angka desimal encoded yang sama, hanya 10 bit yang
diperlukan. Seperti itu adalah dua encodings Chen Ho-Encoding dan dompak Desimal. Yang terakhir
memiliki keuntungan yang subkumpulan dari encoding encode dua angka yang optimal 7 bit dan satu
angka di 4 bit, seperti biasa BCD.

Zoned decimal
Beberapa implementasi (terutama IBM Mainframe sistem) mendukung pernyataan zoned desimal
numerik. Setiap angka desimal disimpan dalam satu byte, dengan menurunkan empat bit encoding
angka dalam bentuk BCD. Bagian atas empat bit, yang disebut "zona" bit, biasanya diatur ke nilai tetap
sehingga byte memegang nilai karakter sesuai dengan angka. EBCDIC menggunakan sistem zona nilai
1111 (hex M); byte hasil ini dalam kisaran F0 ke F9 (heksa), yang merupakan EBCDIC kode untuk
karakter "0" melalui "9". Demikian pula, ASCII menggunakan sistem zona nilai 0011 (hex 3),
memberikan karakter kode 30 sampai 39 (hex).

Untuk menandatangani zoned desimal nilai, di sebelah kanan (paling penting) zona mengunggis
memegang tanda angka yang sama dengan menetapkan nilai-nilai yang digunakan untuk
menandatangani dikemas angka desimal (lihat di atas). Dengan demikian yang zoned desimal nilai
encoded sebagai hex byte F1 F2 D3 mewakili nilai desimal -123 menandatangani:
F1 F2 D3
1 2 −3

EBCDIC zoned decimal conversion table

Note: These characters vary depending on the local character code page.

Fixed-point zoned decimal


Beberapa bahasa (seperti COBOL dan PL / I) langsung tetap mendukung-titik desimal zoned nilai,
menempatkan sebuah titik desimal implisit di beberapa lokasi antara angka desimal sejumlah.
Misalnya, diberi enam byte menandatangani zoned nilai desimal dengan desimal yang diterapkan
mengarah ke sebelah kanan dari empat angka, yang hex byte F1 F2 F7 F9 F5 C0 mewakili nilai
1.279,50:
F1 F2 F7 F9 F5 C0
1 2 7 9. 5 +0

IBM and BCD


IBM menggunakan istilah kode biner-desimal dan BCD untuk 6-bit yang diwakili alphameric kode
angka, huruf besar dan karakter khusus. Beberapa variasi dari BCD alphamerics digunakan dalam
komputer IBM paling awal, termasuk IBM 1620, IBM seri 1400, dan non-anggota Desimal Arsitektur
dari IBM seri 700/7000.

Posisi bit BCD alphamerics label yang biasanya B, A, 8, 4, 2 dan 1. Untuk Encoding angka, B dan A
adalah nol. Huruf A itu encoded (B, A, 1).

Pada 1620 IBM, BCD alphamerics telah menggunakan angka encoded pasangan dengan "zona" dalam
bahkan angka dan "angka" dalam angka ganjil. Input / output hardware terjemahan dikonversi antara
angka pasangan internal dan eksternal standar 6-bit BCD kode.

Arsitektur dalam Desimal IBM 7070, IBM 7072, 7074 dan IBM alphamerics yang menggunakan angka
encoded pasangan (menggunakan dua di luar kode di lima digit, tidak BCD) dari angka 10-kata,
dengan "zona" dalam kiri dan angka "angka" di sebelah kanan angka. Input / output hardware
terjemahan dikonversi antara angka pasangan internal dan eksternal standar enam-bit BCD kode.

Dengan berlakunya System/360, IBM memperluas 6-bit BCD alphamerics ke 8-bit EBCDIC,
memungkinkan penambahan banyak karakter (misalnya, huruf). J variabel panjang packed BCD
numerik data jenis ini juga dilaksanakan.

Hari ini, BCD data masih banyak digunakan dalam prosesor IBM dan database, seperti IBM DB2,
mainframes, dan Power6. Dalam produk ini, yang biasanya zoned BCD BCD (seperti ASCII atau
EBCDIC), packed BCD, atau 'murni' BCD encoding. Semua ini dapat digunakan dengan perangkat
keras dan pengolahan register unit, dan perangkat lunak.

Addition with BCD


Kemungkinan untuk melakukan penambahan dalam BCD oleh pertama menambahkan dalam biner,
kemudian konversi ke BCD setelahnya. Konversi sederhana dari jumlah dua angka dapat dilakukan
dengan menambahkan 6 (yaitu, 16 - 10) jika hasilnya memiliki nilai lebih besar dari 9. Sebagai contoh:
1001 + 1000 = 10001 = 0001 0001
9 + 8 = 17 = 1 1

Dalam BCD, maka tidak bisa ada nilai lebih besar dari 9 (1001) per mengutil. Untuk memperbaiki ini,
6 (0110) yang akan ditambahkan ke jumlah yang benar untuk mendapatkan dua angka pertama:
0001 0001 + 0000 0110 = 0001 0111
1 1 + 0 6 = 1 7

yang memberi dua nibbles, 0001 dan 0111, yang sesuai dengan angka "1" dan "7". Ini hasil "17" dalam
BCD, yang merupakan hasil benar. Teknik ini dapat diperpanjang untuk menambahkan beberapa digit,
dengan menambahkan dalam grup dari kanan ke kiri, propagating kedua angka sebagai melaksanakan,
selalu membandingkan 5-bit angka hasil masing-masing pasangan rangkuman ke-9.

Subtraction with BCD


Pengurangan dilakukan dengan menambahkan sepuluh dari pelengkap dari pengurang. Untuk
menunjukkan tanda angka dalam BCD, nomor 0000 digunakan untuk mewakili angka positif, dan 1001
digunakan untuk mewakili angka negatif. Sisa 14 kombinasi tanda-tanda yang tidak valid. Untuk
menggambarkan menandatangani BCD pengurangan, mempertimbangkan masalah berikut: 357-432.

Dalam menandatangani BCD, 357 adalah 0000 0011 0101 0111. Sepuluh dari pelengkap dari 432 dapat
diperoleh dengan melihat sembilan dari pelengkap sebanyak 432, dan kemudian menambahkan satu.
Jadi, 999 - 432 = 567, dan 567 + 1 = 568. Sebelumnya oleh 568 di BCD oleh tanda negatif kode,
jumlah -432 dapat diwakili. Jadi, dalam menandatangani -432 BCD adalah 1001 0101 0110 1000.

Setelah kedua nomor diwakili dalam menandatangani BCD, mereka dapat ditambahkan bersama:
0000 0011 0101 0111 + 1001 0101 0110 1000 = 1001 1000 1011 1111
0 3 5 7 + 9 5 6 8 = 9 8 11 15

Sejak BCD merupakan bentuk desimal representasi, beberapa sums angka di atas tidak valid. Dalam
hal yang tidak valid yang masuk (semua BCD lebih besar dari angka 1001) ada, hanya menambahkan 6
untuk menghasilkan membawa bit dan menyebabkan jumlah menjadi masukan yang valid. Alasan
menambahkan 6 adalah karena ada kemungkinan 16 BCD 4-bit nilai (sejak 24 = 16), tetapi hanya 10
nilai-nilai yang berlaku (0000 sampai 1001). Jadi, untuk menambahkan 6 tidak valid masukan hasil
sebagai berikut:
1001 1000 1011 1111 + 0000 0000 0110 0110 = 1001 1001 0010 0101
9 8 11 15 0 0 6 6 9 9 2 5

Jadi, hasil pengurangan adalah 1001 1001 0010 0101 (-925). Untuk memeriksa jawaban, catatan yang
pertama adalah tanda sedikit bit, yang negatif. Hal ini kelihatannya benar, sejak 357-432 akan
menghasilkan angka negatif. Untuk memeriksa sisa digit, mewakili mereka dalam desimal. 1001 0010
0101 adalah 925. Sepuluh dari pelengkap dari 935 adalah 999 - 925 = 074 + 1 = 75, sehingga dihitung
answer is -75. Untuk memeriksa, melakukan pengurangan standar untuk memastikan bahwa 357-432
adalah -75.

Perlu diketahui bahwa dalam hal terdapat perbedaan jumlah nibbles akan ditambahkan bersama-sama
(seperti 1053 - 122), jumlah fewest dengan jumlah angka harus terlebih dahulu akan padded dengan
angka nol sebelum mengambil sepuluh dari melengkapi atau subtracting. Jadi, dengan 1053 - 122, 122
terlebih dahulu akan diwakili sebagai 0122, dan dari sepuluh pelengkap dari 0122 harus dihitung.

Background
Yang biner-desimal kode skema yang dijelaskan dalam artikel ini adalah yang paling umum encoding,
tetapi terdapat banyak orang lain. Metode di sini dapat disebut sebagai Simple Binary-kode Desimal
(SBCD) atau BCD 8421. Header ke dalam tabel, maka'8 4 2 1 ', dll, menunjukkan berat setiap bit
ditampilkan; catatan bahwa pada kolom 5. Dua dari bobot yang negatif. Kedua karakter ASCII dan
EBCDIC kode untuk angka adalah contoh dari zoned BCD, dan juga ditampilkan dalam tabel.
Tabel berikut ini menunjukkan angka desimal dari 0 hingga 9 dalam berbagai sistem BCD:

Legal history
Pada tahun 1972, the US Supreme Court overturned keputusan pengadilan yang lebih rendah yang
telah diizinkan paten untuk mengkonversi BCD encoded nomor biner pada komputer (lihat Gottschalk
v Benson). Ini adalah hal yang penting dalam menentukan patentability dan algoritma perangkat lunak.

Comparison with pure binary


Keuntungan

* Banyak integral non-nilai, seperti desimal 0,2, ada yang tak terbatas tempat-nilai perwakilan
dalam biner (.001100110011 ...) tetapi ada yang terbatas di tempat-nilai-kode biner desimal (0,0010).
Akibatnya sistem berdasarkan kode biner-desimal pernyataan dari desimal pecahannya menghindari
kesalahan mewakili dan menghitung nilai-nilai seperti itu.
* Scaling dengan faktor 10 (atau kuasa 10) sangat sederhana, ini berguna ketika desimal scaling
faktor yang diperlukan untuk mewakili non-integer kuantitas (misalnya, dalam perhitungan keuangan)
* Pembulatan angka desimal di perbatasan yang sederhana. Selain dalam desimal dan pengurangan
tidak memerlukan pembulatan.
* Alignment dua angka desimal (misalnya 1,3 + 27/08) adalah mudah, sama persis, shift.
* Konversi ke karakter atau untuk menampilkan bentuk (misalnya, untuk yang berbasis teks, seperti
format XML, atau untuk menggerakkan sinyal untuk tujuh-segmen display) adalah sederhana per-
pemetaan angka, dan dapat dilakukan di linear (O ( n)) waktu. Konversi dari biner melibatkan murni
logika yang relatif kompleks spans digit, untuk jumlah besar dan tidak linear-waktu konversi algoritma
dikenal (lihat angka Binary sistem).

Kekurangan

* Beberapa operasi yang lebih kompleks untuk melaksanakan. Adders memerlukan ekstra logika
menyebabkan mereka untuk menghasilkan wrap dan melaksanakan awal. 15-20% lebih circuitry
diperlukan untuk menambahkan BCD dibandingkan murni biner. Perkalian memerlukan penggunaan
algoritma yang sedikit lebih kompleks dari regu-mask-add (a biner perkalian, memerlukan biner shift
dan menambah atau setara, per-angka atau kelompok angka diperlukan)
* Standar BCD memerlukan bit per empat digit, kira-kira 20% lebih banyak daripada yang binary
encoding. Bila dikemas agar tiga angka yang encoded dalam sepuluh bit, penyimpanan overhead
berkurang menjadi sekitar 0,34%, pada biaya sebuah encoding yang unaligned dengan 8-bit byte batas
umum pada hardware yang ada, sehingga lambat pada implementasi sistem .
* Praktis ada implementasi dari BCD biasanya lebih lambat dari pada operasi biner pernyataan,
terutama pada sistem embedded, karena terbatasnya dukungan untuk prosesor asli BCD operasi.

Applications
BIOS di PC banyak menyimpan tanggal dan waktu dalam format BCD, mungkin untuk alasan historis
(hal yang harus dihindari untuk konversi biner ke ASCII).

Representational variations
BCD implementasi berbagai pekerjaan yang ada pernyataan untuk nomor lainnya. Programmable
kalkulator diproduksi oleh Texas Instruments, Hewlett-Packard, dan lain-lain yang biasanya
menggunakan floating-point BCD format, biasanya dengan dua atau tiga digit untuk (desimal)
exponent. Ekstra bit dari tanda angka dapat digunakan untuk menunjukkan nilai-nilai numerik khusus,
seperti infinity, underflow / melimpah, dan kesalahan (yang berkedip layar).

Alternative encodings
Jika kesalahan dalam perwakilan dan komputasi adalah perhatian utama, daripada efisiensi konversi
dari dan ke layar formulir, skala biner perwakilan yang dapat digunakan, yang menyimpan nomor
desimal sebagai binary-encoded integer dan biner-desimal encoded menandatangani eksponen.
Misalnya, 0,2 dapat digambarkan sebagai 2 × 10-1. Perwakilan ini memungkinkan cepat perkalian dan
pembagian, tetapi mungkin memerlukan perkalian oleh kuasa selama 10 dan pengurangan Selain untuk
menyesuaikan dengan desimal. Hal ini terutama sesuai untuk aplikasi dengan tetap jumlah desimal
tempat, yang tidak memerlukan penyesuaian selama penambahan dan pengurangan dan tidak perlu
simpan eksponen tandasnya.

Chen Ho-Encoding menyediakan boolean transformasi untuk mengubah kelompok tiga BCD encoded-
angka dari dan ke 10-bit nilai-nilai yang dapat efisien dalam hardware encoded dengan hanya 2 atau 3
pintu keterlambatan. Dompak Desimal yang sama juga skema yang berurusan lebih efisien dan nyaman
dengan keadaan di mana jumlah angka bukan merupakan beberapa dari 3; ini adalah desimal encoding
yang digunakan dalam standar IEEE 754-2008.

See also
• Gray code
• Densely packed decimal
References
1. ^ "General Decimal Arithmetic". http://speleotrove.com/decimal/.
• Arithmetic Operations in Digital Computers, R. K. Richards, 397pp, D. Van Nostrand Co., NY,
1955
• Schmid, Hermann, Decimal computation, ISBN 047176180X, 266pp, Wiley, 1974
• Superoptimizer: A Look at the Smallest Program, Henry Massalin, ACM Sigplan Notices, Vol.
22 #10 (Proceedings of the Second International Conference on Architectural support for
Programming Languages and Operating Systems), pp122-126, ACM, also IEEE Computer
Society Press #87CH2440-6, October 1987
• VLSI designs for redundant binary-coded decimal addition, Behrooz Shirazi, David Y. Y. Yun,
and Chang N. Zhang, IEEE Seventh Annual International Phoenix Conference on Computers
and Communications, 1988, pp52-56, IEEE, March 1988
• Fundamentals of Digital Logic by Brown and Vranesic, 2003
• Modified Carry Look Ahead BCD Adder With CMOS and Reversible Logic Implementation,
Himanshu Thapliyal and Hamid R. Arabnia, Proceedings of the 2006 International Conference
on Computer Design (CDES'06), ISBN 1-60132-009-4, pp64-69, CSREA Press, November
2006
• Reversible Implementation of Densely-Packed-Decimal Converter to and from Binary-Coded-
Decimal Format Using in IEEE-754R, A. Kaivani, A. Zaker Alhosseini, S. Gorgin, and M.
Fazlali, 9th International Conference on Information Technology (ICIT'06), pp273-276, IEEE,
December 2006.

Anda mungkin juga menyukai