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-pointpoint 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 masingmasing 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 Digit
BCD 8421
Sign
Notes
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 nilainilai 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 perpemetaan 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 encodedangka 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-CodedDecimal 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.