Thanks, Russel, that's a good explanation. It's really just a quirk of position notation numbering systems. We take advantage of it in programming simply to express binary data more compactly but still in a form where a human can easily 'see' the individual bits (with a little practice).
I'd only add that this quirk of positional notation works for other number bases. E.g. because 9 is 3^2, one digit of a base-9 number corresponds to two digits of a base-3 number, and because 27 is 3^3, one digit of a base-27 number corresponds to three digits of a base-3 number. More generally, for any base-n, one digit of a base-(n^m) number corresponds to m digits of a base-n number. So this quirk isn't special to binary, but binary data is what we care about in programming.