charascii

Is there any logic behind ASCII codes' ordering?


I was teaching C to my younger brother studying engineering. I was explaining him how different data-types are actually stored in the memory. I explained him the logistics behind having signed/unsigned numbers and floating point bit in decimal numbers. While I was telling him about char type in C, I also took him through the ASCII code system and also how char is also stored as 1 byte number.

He asked me why 'A' has been given ASCII code 65 and not anything else? Similarly why 'a' is given the code 97 specifically? Why is there a gap of 6 ASCII codes between the range of capital letters and small letters? I had no idea of this. Can you help me understand this, since this has created a great curiosity to me as well. I've never found any book so far that has discussed this topic.

What is the reason behind this? Are ASCII codes logically organized?


Solution

  • There are historical reasons, mainly to make ASCII codes easy to convert:

    Digits (0x30 to 0x39) have the binary prefix 110000:

    0 is 110000
    1 is 110001
    2 is 110010
    

    etc. So if you wipe out the prefix (the first two '1's), you end up with the digit in binary coded decimal.

    Capital letters have the binary prefix 1000000:

    A is 1000001
    B is 1000010
    C is 1000011
    

    etc. Same thing, if you remove the prefix (the first '1'), you end up with alphabet-indexed characters (A is 1, Z is 26, etc).

    Lowercase letters have the binary prefix 1100000:

    a is 1100001
    b is 1100010
    c is 1100011
    

    etc. Same as above. So if you add 32 (100000) to a capital letter, you have the lowercase version.