On ASCII Symbols
| Symbol | On Typewriter? | ASCII codepoint | ||
|---|---|---|---|---|
| Decimal | Hexadecimal | Binary | ||
| ! | Yes | 33 | 21 | 010 0001 |
| " | Yes | 34 | 22 | 010 0010 |
| # | Yes | 35 | 23 | 010 0011 |
| $ | Yes | 36 | 24 | 010 0100 |
| % | Yes | 37 | 25 | 010 0101 |
| & | Yes | 38 | 26 | 010 0110 |
| ' | Yes | 39 | 27 | 010 0111 |
| ( | Yes | 40 | 28 | 010 1000 |
| ) | Yes | 41 | 29 | 010 1001 |
| * | Yes | 42 | 2A | 010 1010 |
| + | Yes | 43 | 2B | 010 1011 |
| , | Yes | 44 | 2C | 010 1100 |
| - | Yes | 45 | 2D | 010 1101 |
| . | Yes | 46 | 2E | 010 1110 |
| / | Yes | 47 | 2F | 010 1111 |
| : | Yes | 58 | 3A | 011 1010 |
| ; | Yes | 59 | 3B | 011 1011 |
| < | No | 60 | 3C | 011 1100 |
| = | Yes | 61 | 3D | 011 1101 |
| > | No | 62 | 3E | 011 1110 |
| ? | Yes | 63 | 3F | 011 1111 |
| @ | Yes | 64 | 40 | 100 0000 |
| [ | No | 91 | 5B | 101 1011 |
| \ | No | 92 | 5C | 101 1100 |
| ] | No | 93 | 5D | 101 1101 |
| ^ | No | 94 | 5E | 101 1110 |
| _ | Yes | 95 | 5F | 101 1111 |
| ` | No | 96 | 60 | 110 0000 |
| { | No | 123 | 7B | 111 1011 |
| | | No | 124 | 7C | 111 1100 |
| } | No | 125 | 7D | 111 1101 |
| ~ | No | 126 | 7E | 111 1110 |
| ¢ | Yes | Not in ASCII | ||
| ¼ | Yes | Not in ASCII | ||
| ½ | Yes | Not in ASCII | ||
| ¾ | Infrequent | Not in ASCII | ||
Note on Typewriter Symbol Repertoire
When I say that the symbol was on typewriters, I don't mean that it was on all typewriters. Indeed, some typewriters did without the numbers 1 and 0; numeral 1 was replaced by lowercase l and numeral 0 was replaced by uppercase O. Also a typewriter could be without an exclamation mark(!); the typist had to type an apostrophe('), backspace, and then type a period(.). Another key that some typewriters did without was the cent sign(¢); it was typed by overstriking a lowercase c with a (forward) slash(/). Some also did without plus(+) and equals(=). I have also seen the instruction in a typing book to type a division sign(÷) by overstriking a hyphen(-) with a colon(:).
Symbol Keys on Typewriters
On what I want to call a full typewriter there were 24 non-alphanumeric symbols; I'm including the cent sign(¢) and the fractions ½ and ¼, but not the fraction ¾. Because of the limitations of the shift lock on typewriters and the frequency with which they were used in all-uppercase text, the period and comma when shifted did not change the character that was typed; so they were each on a key with no other symbol. 10 of the symbols were placed on the shifted positions of the number keys. This left 12 more symbols to be put on 6 keys in pairs.
ASCII changes
The Removed
The Fractions
ASCII wisely dropped the fractions. Even if one had all 3 fractions of ¼, ½, and ¾, what real use would only having 3 fractions be. I suppose if one also added the 4 fractions ⅛, ⅜, ⅝, and ⅞, one could have argued that that was all that was needed to quote U.S. stock prices, which were being done by eighths when ASCII was being developed. But now one would have 7 slots being taken up by fractions, and people would still be asking for other possibilities; because virtually everyone in the U.S. was using inch measures, why not extend to sixteenths, thirty-seconds, or sixty-fourths. Also, if going to eighths, why not at least have ⅓ and ⅔? Or even as Unicode now has, all the fifths, and the unsimplifiable sixths (i.e., ⅙ and ⅚)? In retrospect, it was a good choice by the people working on ASCII not to be influenced by the U.S. stock market being in eighths, because much later -- after ASCII was basically fixed in stone -- the U.S. stock market decimalized removing that special need for eighths.
The Cent
Unlike the fractions which come with a "where do we stop?" problem, the removal of the cent sign(¢) was about saving a single slot. However, I think the fact that cents could also be represented as decimal dollars was a factor in choosing to exclude the cent sign from ASCII; others have also shared this guess.
The Change From Shift Lock to Caps Lock
Because computers were electronic, they could have a more sophisticated system: on a typewriter the shift lock gives the shifted version of all the keys; on a computer one can have a true caps lock that only shifts the letter keys. This means that the period(.) and comma(,) can now share their keys with another symbol each.
Between the 3 above changes, there is now room for 5 new symbols: 2, one each on the period and comma; 2 on the key that was ½/¼; and 1 where ¢ was.
The added
ASCII added two pairs of brackets: the square brackets([]) which were rarely on typewriters, and curly brackets({}) which were not on typewriters. ASCII also added less than(<) and greater than(>) which also weren't on typewriters.
The Odd Ones
ASCII also added the vertical bar(|) and a backwards slash(\).
The Accent Marks
Given that the printers that were still the dominant means of interacting with computers could also backspace and overstrike characters, the characters ^(up arrow or circumflex), ~(tilde), and `(grave accent) were added. Letting the apostrophe/single quote mark(') do double duty as an acute accent, and the double quote mark(") do double duty as a diaeresis, gives most of the accent marks that the designers of ASCII were familiar with.
In all ASCII added 11 symbols to the standard full typewriter ones. Between ASCII's dropping of 3 characters and true caps lock opening up 2 new places for symbols, a total of 5 symbols could be added without needing more keys; leaving 6 extra symbols that needed keys. This required an extra 3 keys to be added to the layout, since each key could hold 2 symbols.
Paths Not Taken
Despite the fact that I could wish that ASCII had one more printable character: a symbol meaning assignment. The C language chose to allow assignment in an if condition. This prevented it from doing what many BASICs did: using context to determine if "=" meant compare or assign. C's solution was to use "=" for assignment and "==" for comparison. At least in part due to mathematics textbooks saying things like, "if a=b and b=c, then a=c", programmers will be used to "=" meaning compare in some contexts. Pascal tries not to fight this influence, using ":=" for the assignment operator, but this does not take in to account that in most programming languages, assignment is significantly more common than equality comparison. So the more frequently used operation takes more keystrokes to type. If C hadn't become as popular as it had, perhaps modern languages could use context to determine what "=" means in a particular place, assignment or comparison, letting one both use a single character to indicate assignment, and the usual mathematical convention to indicate equality comparison. Even Python, which for a long time didn't allow assignment in an if condition (and still doesn't use "=" for that particular purpose), didn't try to use context for that. I still maintain that C's designers made a bad choice, but while Pascal's was a better choice, it wasn't an ideal choice either because assignment requires two keystrokes. One could wish that the developers of ASCII had reserved a single character that was well-chosen to indicate assignment that was distinct from the equals character.
ASCII also seems packed with some control characters that are rarely used today; it's nice to imagine if a few more printable characters had been packed in, but ASCII already expanded the keyboard by 3 keys to accommodate its printable characters. Imagine if it had expanded by, say, 8 more. I already find that my keyboard still has a few symbols that are not comfortable to reach for during touch-typing on a regular basis. Though as someone who does recreational programming, I have very few characters that I could imagine giving up easily even to make my keyboard more comfortable. On the other hand, it is difficult to say what would be missed if it were not taken for granted for so long. I don't miss having a single character for membership in a set for which APL used "∈", even though I use "in" frequently in Python to do the same function. Nor have I ever felt any strong feeling about having to use "!=" in programming languages despite handwriting "≠" quite frequently. Perhaps had the designers of C made a different choice or C had not become so popular, I wouldn't be thinking that ASCII should have made a different choice in that regard.