BCD
BCD (engelska: binary-coded decimal, "binärkodat decimalt") eller NBCD (engelska: natural binary-coded decimal, "naturligt kodat decimalt"), är sätt att representera tal i det decimala talsystemet som följder av ettor och nollor. Principen är att de tal som skall kodas delas in i decimala siffror (0–9) som sedan omkodas till motsvarande binära tal. Talet anges vanligen binärt med fyra bitar (en nibble) eller med fyra bitar i varje byte.
Den naturligaste kodningen, 8421-kod eller natural binary-coded decimal, bygger på att bitarna i en nibble har värdena 8, 4, 2 och 1, liksom då man representerar godtyckligt data som hexadecimaltal. Bitkombinationer som ger värden över 9 används inte eller används för specialfunktioner (t.ex. för tecknet, om negativa tal skall kunna kodas). Också andra kodningar används.
Genom att arbeta med basen tio istället för två undviker man vissa avrundningsproblem, till exempel kan en tiondel inte skrivas exakt med vanliga binära flyttal. Dessutom är det lätt för en människa att skriva och läsa. Det räcker att lära sig tio koder för siffrorna 0–9, och sedan substituerar man systematiskt siffrorna i det ursprungliga talet med motsvarande koder.
Nackdelarna är två, dels blir ett BCD-kodat tal längre än motsvarande tal i ren binärform (detta på grund av att fyra ettor eller nollor kan ge upphov till sexton kombinationer medan endast tio av dessa används som siffror), dels blir lätt själva hanteringen av i grunden decimala tal i en maskin som bygger på binär aritmetik ineffektiv. Ineffektiviteten uppstår endast vid långa matematiska beräkningar och i normalfallet saknar det betydelse om processorn räknar i BCD-kod då övrig hantering ändå sätter körtiderna. Tiden som åtgår för att konvertera BCD-siffror till binära är ändå så pass lång att det oftast inte lönar sig att översätta. Angående lagringsutrymme så har priserna blivit så pass låga att behovet av att öka informationstätheten har krympt avsevärt.
I vanliga fall håller en byte ett tal mellan 0 och 255 (28-1) men BCD-tal låter varje halv byte (nibble) hålla ett tiotal.
Ett exempel:
53 i vanlig form ser ut som följer: 0011 0101 (32 + 16 + 4 + 1)
53 i BCD-format ser ut så här: 0101 0011 ( 4 + 1 och 2 + 1)
De flesta processorarkitekturer har instruktioner för att direkt hantera BCD-tal, till exempel Motorola M68k och x86.
Koder
redigeraDecimalt | BCD |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |