Hlavní navigace

Názor ke článku Bug roku 2010 od Radovan - [16] Tak ještě jednou to BCD: 0000 1001...

  • 7. 1. 2010 2:07

    Radovan (neregistrovaný) 88.146.198.---

    [16] Tak ještě jednou to BCD: 0000 1001 je binárně zapsané desítkové dvojčíslí (Binary Coded Decimal) 09 a 00001001 je binární číslo 9. Obě mají stejnou podobu, což ale platí jen pro čísla 0 až 9. Zrada je v tom, že dalších šest hodnot 0xA až 0xF se v BCD nevyužívá, takže 0001 0000 v BCD znamená teprve 10, zatímco binárně 00010000 je už 16! A s každou další desítkou se ten rozdíl ještě zvětší, z celkových 256 možností které dává jeden byte se v BCD využije jen 100...
    Ano, vypadá to že je to od počátku špatně navržené, a že tuhle možnost prostě nikoho nenapadlo ani odzkoušet, natož v programu ošetřit. Také to mohlo vzniknout tím, že někdo nepochopil nebo nepřečetl datasheet toho hodinového čipu a prostě si myslel že funguje jinak než tomu ve skutečnosti je.
    Pro podrobnější popis BCD mrkni sem, sem, nebo do nějaké učebnice, není to jen otázka pokladen ale spousty dalších zařízení a programování jako takového, je to o číselných soustavách a různých kódováních čísel, kterých se v historii používaly desítky a dodnes jich pár přetrvává.

    BIN BCD HEX DEC OCT
    00000111 07 0x07 7 07
    00001000 08 0x08 8 10
    00001001 09 0x09 9 11
    00001010 -- 0x0A 10 12
    00001011 -- 0x0B 11 13
    00001100 -- 0x0C 12 14
    00001101 -- 0x0D 13 15
    00001110 -- 0x0E 14 16
    00001111 -- 0x0F 15 17
    00010000 10 0x10 16 20
    00010001 11 0x11 17 21
    00010010 12 0x12 18 22