3 ms·
Is there anything special why 8-bit won, or is it just a compromise between 6,8,10,12,etc.
by miohtama 3y ago
Is there anything special why 8-bit won, or is it just a compromise between 6,8,10,12,etc.
- PaulHoule 3y agoOn some sense 7 bits won since ASCII used only 7 bits, leaving the question of do you leave the high bit zero, use it for parity, pack 7-into-8 for long strings, etc. (Sometimes in serial comms in the old days we really sent 7 bit characters) You could pack upper and lowercase roman letters and numerals for a total of 62 characters and then have room for a period and space and you’re full. With only uppercase you can a decent set of symbols, see the SIXBIT encoding https://rabbit.eng.miami.edu/info/decchars.html https://rabbit.eng.miami.edu/info/decchars.html that Digital used for file names back when there was a computer industry on the US East Coast. If you wanted something general purpose you’d need to add some kind of shift to get lower case characters if not additional symbols and control characters, but now the meaning of the characters depends on state which might have been seen as a burden on the peripherals of the day and is certainly more of a hassle to program. Note it was seen as decisive that IBM’s 360 used 8-bit characters that could have fit the ASCII code but they went with the 8-bit https://en.wikipedia.org/wiki/EBCDIC https://en.wikipedia.org/wiki/EBCDIC code instead because it was easier to make compatible with older keypunch machines. Already 8-bit is looking like overkill, I think the control characters were not really properly utilized in 7-bits, 8-bits let you fit some combination of extra symbols, modified roman letters used in other european languages, and such. You can’t cover every European language in 8 bits (which is why they had different code pages) but you could get most latin variants and probably some other sets like Greek, Cyrillic, even Japanese Kana, in 10-bits but hardly anyone wants to use all those characters at the same time. If you had a sixty bit computer you might also consider a 5-bit code set like https://en.wikipedia.org/wiki/Baudot_code https://en.wikipedia.org/wiki/Baudot_code
- radiator 3y agoWow, in your last link about Baudot's code we read: In 1876, he changed from a six-bit code to a five-bit code, as suggested by Carl Friedrich Gauss and Wilhelm Weber in 1834. I have seen references to Gauss' name in so many places -- at some point I should learn not to be surprised anymore.
- jacquesm 3y agoThe total scientific establishment in the world in those days was a few hundred people at best, and the output of the most prolific ones was very impressive. These people were true polymaths, usually equally comfortable with the state of the art of mathematics, biology, physics and astronomy of their age.
- Someone 3y agoPossibly just because it’s the smallest that supports ‘enough’ characters for us English and was the cheapest useful one at a time when memory was expensive. 6 bits is too few for a lower- and uppercase alphabet, digits and punctuation. 7 bits could have worked (see: ascii), but I guess 8 won because 7 would be an odd (no pun intended) choice and because of the popularity of the VAX.
- NikkiA 3y ago6 could have worked too, we'd just need a uppercase prefix and let the terminal handle it. In fact given normal English case rules, I'm surprised that we devoted a whole extra 26 characters to uppercase when bit rate was at a premium.
- Someone 3y agoWhen bit rate was really at a premium, we didn’t. https://en.wikipedia.org/wiki/Baudot_code#Character_set https://en.wikipedia.org/wiki/Baudot_code#Character_set: “The cells marked as reserved for extensions (which use the LS code again a second time—just after the first LS code—to shift from the figures page to the letters shift page) has been defined to shift into a new mode. In this new mode, the letters page contains only lowercase letters, but retains access to a third code page for uppercase letters, either by encoding for a single letter (by sending LS before that letter), or locking (with FS+LS) for an unlimited number of capital letters or digits before then unlocking (with a single LS) to return to lowercase mode.” In computing, using such ‘shift’ codes complicates programming, though, as it makes it hard to compute string length or to index into a string (similar to the problem with UTF-8). Worse, if you see a given code sequence in a larger sequence, you may have to go arbitrarily far back in the input to figure out what it means.
- timbit42 3y ago6-bit was common previously and then ASCII was 7-bit but that's an odd number so 8 made the most sense and it's a power of 2, which makes it even better than 6 which isn't.
- rogerbinns 3y agoBinary Coded Decimal was also popular - eg most processors included instructions for operating that way. You need 4 bits for a BCD digit, so a multiple of 4 bits is convenient. https://en.wikipedia.org/wiki/Binary-coded_decimal https://en.wikipedia.org/wiki/Binary-coded_decimal
- rahen 3y agoSome early computers even had a dual-mode (binary / BCD) ALU: https://en.wikipedia.org/wiki/Bull_Gamma_3 https://en.wikipedia.org/wiki/Bull_Gamma_3
- teo_zero 3y agoThe glorious 6502 had a flag to perform all arithmetic operations in BCD.
- Animats 3y agoIBM mainframes still do. It's used by COBOL.[1] [1] https://www.ibm.com/docs/en/cobol-zos/6.4?topic=arithmetic-sign-representation-zoned-packed-decimal-data https://www.ibm.com/docs/en/cobol-zos/6.4?topic=arithmetic-s...
- Animats 3y agoBecause of the IBM System/360 unified architecture. Before the IBM System/360, there were "scientific" computers, which were word-oriented and used binary arithmetic, and "business" computers, which were character-oriented and used decimal arithmetic. The IBM System/360 unified the product lines with a standardized architecture.
- o11c 3y agoNote that non-power-of-2 bytes means it's impossible to use mere bitwise operations when computing bit indices. Instead, you have to use integer division (ick!). There are probably lots of similar problems; this is just one that I thought of while writing recent code.