Placeholder Image

Subtitles section Play video

  • As part of doing bits and bytes and fairly low-level stuff, we have mentioned

  • the possibility of a thing called 'binary coded decimal' and that, effectively, IBM

  • in their mainframe days, led the charge on this. Now I've done a video on this and how

  • it led, eventually, to extended binary coded decimal (EBCDIC). I would like to talk about

  • what is BCD, why is it necessary and in particular that's to answer a question

  • that I did, vaguely, think about in my early days of doing heavyweight, macho

  • calculations [on a computer] overnight. It's effectively: "How does this stuff ever get printed out?"

  • I thought, well, what's the biggest ratio between actual computation and fairly

  • quick printout that I can think of. Not my quantum calculations, they're

  • minor-league. Those of you who are familiar with Douglas Adams and "Hitchhiker's

  • Guide to the Galaxy", which was made into a BBC series here and also became a

  • movie, I think, will know that Douglas, who was a very far-seeing guy, had this

  • idea of the ultimate computer called Deep Thought. It was [an idea] years ahead of its

  • time, because I'm pretty sure that Deep Blue - IBM's chess machine; Deep Mind - the AI

  • machine that's doing GO, is it, and so on. And you know Deep Learning,Deep

  • everything. I'm not at all sure it isn't all down to Douglas Adams! >> Sean: I just have to

  • point out here that the ultimate computer was the Earth! >> DFB: Oh in the very end ... ?

  • >> Sean: And there will be some fans pointing out...I >> DFB: Oh! I see. Nevertheless, Deep Thought

  • was asked: "Deep Thought: what is the answer to Life the Universe and

  • Everything?: And several million years later, presumably even with quantum assistance.

  • [Music] >> Deep Thought: "You're really not going to like it!" >> High Priests: "Tell us!"

  • The answer to Life the Universe and Everything is: [voices on film] 42 42 42 >> DFB: 42 ! And my first thought

  • when I was laughing out loud at that was, I thought: "What's 42 in binary ?!" Is there

  • something special about it? And, yeah, how would you convert the binary string for 42

  • into being literally 4 and 2 on a piece of line-printer output? 42 in

  • binary is 101010. How do we know that that's 42?

  • Well, starting at the right its powers of two. So, 2^0 is units ,then 2s

  • then 4s then 8s then 16s and 32s. Armed with that knowledge we say OK

  • it's a 2 plus an 8 which is 10 plus a 32 is 42. Pretty good look! A six-bit

  • representation for a 2-digit decimal number. But if you feed that into a

  • printer you're not going to get 42 printed out, because by and large they do

  • not interpret binary. So, where does the printable form of '42' come from? And the

  • answer is it goes way back to the fact that IBM and their computing machines -

  • way back at the start of the 20th century they were the Hollerith company. You

  • know, doing census details; controlling elections from punch cards and some IBM

  • early electronic computers I think - the IBM 650 was it? - actually did work

  • internally on decimal. Just like Tommy Flowers [and Colossus]. I think they both used bi-quin.

  • But the pressure was on, from binary-based hardware to say: "This [binary] is more

  • efficient by far. You'd be mad not to use it". OK?,says IBM, but although it's got

  • to be a binary representation we want to directly link it to the decimal that

  • will ultimately be printed out. Now think about it, that's easy to do but

  • what would this binary-coded decimal be for 42? Every decimal position can range

  • from 0 to 9. So, how many bits do we need to represent 9? Well, we know that 3

  • bits isn't enough. 3 bits goes up to 111, which is 7, but you need a 8 and 9. So

  • you've got to go to that 4th bit. And you end up, of course, with 8 being 1000

  • and 9 being 1001. Ah! - I hear several of you saying - but you don't stop there, you

  • can go on to hexadecimal?! And this is precisely the thing with BCD. You must

  • *not* let it go over into the hexadecimal range from 10 - 16 [correction: 10 - 15] because the average

  • person wants their answers out in decimal - not in hexadecimal. So, here we go then. Look 0100

  • taken as a grouping of bits, on its own, that's nothing in the units column;

  • 0 in the 2's column; 1 in the 4s column; 0 in the 8s column. That

  • represents decimal 4. Right next door to it, is a separate 4-bit entity. If I write

  • down 0010 that represents a 2. In its simplest form that is what binary

  • coded decimal is. And you just use them in four-bit nibbles. Now we all know a

  • nibble is half a bite. A byte equals 8 bits - well it does in the modern world.

  • So half a bite? Well, the name 'nibble' caught on for

  • obvious reasons. A nibble being a small bite and I'll use an 'i', but some people

  • like to extend the joke as much as possible and actually spell nybble with

  • a 'y'. I don't mind! And then a nibble can hold a hex digit. You might say: Oh! well -

  • that's it then - if I fed 0100 down a serial line, into

  • a printer, it would cough into life and print 4 ?" No. Not quite. But we're getting

  • close. Because what we've got to ask ourselves is ...

  • this whole print-out thing is treating decimal digits as characters. They're not

  • being thought of in their numeric sense at all. It's just any other character. It's

  • like an 'A', a 'B', a'Z', a '!' or whatever. The ASCII committee in the

  • 1960s didn't just work in a vacuum. They knew what IBM - who they loved

  • and hated - had been doing for years. And it basically said: "It is so much easier

  • if you base what's printed ultimately on a BCD representation, but put a special

  • marker at the front of the BCD to pad it out to an 8-bit byte. But do it in such

  • a way that, in a sense, the codes that are going to do 0 - 9 are in a 'sensible' place.

  • Now, what does that mean. Well, let's do ASCII first, even though historically

  • it was second. In ASCII the digits occupy from 30 (hexadecimal) to 39 (hexadecimal)

  • What it means is, if you have

  • got, shall we say this 4 (0100). That is your hex nibble for 4. All you have

  • to do, to make it printable, as an ASCII 4, is to glue on the left hand end

  • hexadecimal three (which is the same as decimal three) which is 0011. So 0011

  • prepended to 0100 gives you an 8-bit entity which, if you fire that down at a

  • line printer it'll cough into action and print a 4.

  • Notice that when I say "glue on at the front", in order for it to be efficient

  • you don't want to be adding on something that will cause carries, if you see

  • what I mean. You need to park it [the ASCII boundary where digits start] on a multiple of 16,

  • and then what will happen is that whatever way you convert your 4 into

  • being 34 (hex) it will not cause ripple carries, which are inefficient. OK, say the

  • IBM mainframe types. Why not (historically) tell the youth of today what IBM did originally?

  • Same idea! ASCII learned a lot from what

  • IBM did. In IBM EBCDIC you don't prepend a 3 (0011 hex), you prepend an F (1111 hex)

  • But the principle is the same. Yeah? it's cleanly on that boundary.

  • So, that's an absolute crucial fact in making BCD-to-printed-out-results be fast and

  • efficient. You need to be able to put something in there that's low cost

  • because you're going to be doing millions of these BCD to ASCII/EBCDIC

  • conversions. So that is a very sort of crucial fact to get hold of to try and

  • reduce the conversion burden before print out. So, in many ways then that's

  • much of the story. If you once got it into BCD then both

  • ASCII or (if you're still on IBM mainframes) EBCDIC, do make it easy for

  • you to get into a printable form very quickly. And of course the I/O routines

  • hidden underneath Fortran and C will be well aware of this. Converting from pure

  • binary 101010 to 42 BCD (0100 0010), they look very different! When you get

  • onto telling us how to do it, it's not going to be a cheap operation is it?

  • Because that's the hard bit. It's all very well saying [that] getting from BCD to ASCIIk

  • is a piece of cake, but what about getting from binary to BCD? And the answer is

  • there's bound to be overheads there and it's bound to be something that you

  • probably want to eliminate? And to that effect, some people in the

  • commercial computing set-up said: "Look, binary to BCD will turn out to be

  • expensive. Tell you what - If what we do is totally trivial [arithmetically] and really isn't rocket

  • science, wouldn't we be better off to try and devise software, or

  • even hardware assistance circuits, to do all the arithmetic on a BCD notation?

  • Never convert it into pure binary! Because if all you're doing is adding up how

  • many voters in, y'know, Norwalk County or something, have voted for such-and-such,

  • you don't need all these huge great binary things that numerical analysts use

  • You're just counting numbers. And even if you're looking at somebody's balance,

  • in dollars and cents, surely that's simple enough arithmetic. It's better to

  • perhaps pay a little penalty for doing BCD arithmetic because you can overcome

  • that penalty, a bit, by having specialized hardware. Why not do it all in BCD and

  • then you don't have the binary to BCD overhead? All you have to do after you've

  • done your BCD arithmetic is slip a FFFF [correction: 1111] on the front end if it's EBCDIC

  • a 3 (hexadecimal) if its ASCII, and that's it. [It] prints out. There is one

  • classic one where you really can pick up that it's very advantageous to do it in

  • BCD. If you think about the number 0.10, which might represent ten

  • cents shall we say. You know, your bank account's been drained down. It's

  • down to its last 10 cents. So here you've got 0.10.

  • That's .1 (in decimal). What is it in binary? Oh dear!

  • You look at what it is in binary: [looks at notes] 0.000110011001100 ....

  • And it goes on for ever! There is no exact representation of .1 (decimal)

  • as a binary expansion. It just doesn't stop. And accountants and actuaries get

  • paranoid about that: "Oh! I know it'll never happen but I hate the idea that

  • the rounding might go wrong and imy client's balance might drop to

  • 9 cents instead of 10 cents (!) How about some other examples of things that use

  • BCD, just to finish off with? I don't know if I've got it here ...

  • to dig it out of there, Sean. eventually [reaches for desk drawer] It's a little [electronic] hand calculator. What better

  • place to use BCD? It's utterly display- dominated. Apart from things like square

  • root - that's probably about the most complex thing that you can ask a simple

  • four-function calculator to do. But mostly it's additions, subtractions

  • simple divides and so on. They use BCD! Another example of simple

  • devices [that] you see in a shopping mall, or whatever, that could use BCD. Digital

  • clocks. It makes eminent sense to use BCD

  • because it's the display, and the change in the display, is happening all the

  • time - every second = but the actual incrementing is trivial. You don't need

  • to convert into binary to add one second to a digital display,

  • you really don't. Live with the BCD. Focus on the display, because that's what

  • matters above all else. i

As part of doing bits and bytes and fairly low-level stuff, we have mentioned

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it

B1 binary decimal hexadecimal nibble hex douglas

Binary Coded Decimal (BCD) & Douglas Adams' 42 - Computerphile

  • 0 0
    林宜悉 posted on 2020/03/27
Video vocabulary