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