posted 1 year ago
When I was at school, one of the featured courses was "DP Math" (DP/Data Processing was the term used for what we call Information Technology these days, allowing for some evolution along the way).
One of the things that we covered in the course was alternate number bases. Which actually was a topic touched on at the grade-school level at the time. Not sure about now.
While "base 10" may seem natural to you, it is anything but. We could have just as easily used base 5. The Mayans had a very effective number notation that ran on Base 20. And even had a zero, which was not true in Europe until comparatively recently. The Greeks and Romans and Egyptions had no zero marker - it can from Hindu/Arabic sources.
And of course, the ancient Mesopotamians calculated freely using 60 as their basis, which we still carry over for common-use angle measurements and hours of the day.
But having numbers is only the start. Sooner or later you likely need to write them down. So Base 10 notation was born, the familiar 0123456789 glyphs. Or, in China/Japan and related countries, the equivalent characters, which I won't attempt to reproduce here. The "Arabic" Arabic numbers likewise, as well as the glyphs used in various alphabets, abugidas, and so forth around the world.
But most computers these days actually are comprised of binary ciruits. On/OFF, 0/1, and numbers in Base 2 (binary) are of course, 0, 1, 10, 11, 100, 101, …
Binary gets unwieldy once you have 16 bits or more, though, so we pick alternative notations, preferably based on powers of 2 in order to make conversion to Base 2 bits easier. For Unix systems, Base 8 (octal) was preferred: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12 … For mainframes, Base 16 was more common, and the fancy name for Base 16 is Hexadecimal. Beause we only have 10 standard digit characters, we stole alphabet letters for the higher numbers, which is how we got 0, 1, 2, 3, …, 8, 9, A, B, C, D, E, F, 10, 11, … 19, 1A, 1B, …
A legacy of the Unix octal notation is that a leading zero on a number indicates to C and later Java compilers that the number isn't decimal, it's octal. So, for example, the number 012 is actually decimal 10. That was extended to allow hexadecimal constants using an "x", so 0x0b is 013 octal, or 11 decimal.
And there you are.
Education won't help those who are proudly and willfully ignorant. They'll literally rather die before changing.