this post was submitted on 06 Sep 2025
493 points (97.3% liked)

Programmer Humor

26223 readers
1742 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
 

Did you ever saw a char and thought: "Damn, 1 byte for a single char is pretty darn inefficient"? No? Well I did. So what I decided to do instead is to pack 5 chars, convert each char to a 2 digit integer and then concat those 5 2 digit ints together into one big unsigned int and boom, I saved 5 chars using only 4 instead of 5 bytes. The reason this works is, because one unsigned int is a ten digit long number and so I can save one char using 2 digits. In theory you could save 32 different chars using this technique (the first two digits of an unsigned int are 42 and if you dont want to account for a possible 0 in the beginning you end up with 32 chars). If you would decide to use all 10 digits you could save exactly 3 chars. Why should anyone do that? Idk. Is it way to much work to be useful? Yes. Was it funny? Yes.

Anyone whos interested in the code: Heres how I did it in C: https://pastebin.com/hDeHijX6

Yes I know, the code is probably bad, but I do not care. It was just a funny useless idea I had.

you are viewing a single comment's thread
view the rest of the comments
[–] cows_are_underrated@feddit.org 2 points 3 days ago (2 children)

I am constantly on how I can allow Uppercase, without significantly reducing the posiible amounts of chars

[–] Cethin@lemmy.zip 5 points 3 days ago* (last edited 3 days ago)

If you're ever doing optimizations like this, always think in binary. You're causing yourself more trouble by thinking in decimal. With n bits you can represent 2^n different results. Using this you can figure out how many bits you need to store however many different potential characters. 26 letters can be stored in 5 bits, with 6 extra possibilities. 52 letters can be stored in 6 bits, with 12 extra possibilities. Assuming you want an end of string character, you have 11 more options.

If you want optimal packing, you could pack this into 48 bits, or 6 bytes/chars, for 8 characters.

[–] magic_lobster_party@fedia.io 9 points 3 days ago (1 children)

Well it’s certainly possible to fit both uppercase and lowercase + 11 additional characters inside an int (26 + 26 + 11 = 63). The you need a null terminating char, which adds up to 64, which is 6 bits.

So all you need is 6 bits per char. 6 * 5 = 30, which is less than 32.

It’s easier to do this by thinking in binary rather than decimals. Look into bit shifting and other bitwise operations.

[–] sukhmel@programming.dev 2 points 3 days ago

Depending on the use-case you might also want to add special case value like @Redkey@programming.dev did in their example, and get kind of UTF-8 pages. Then you can pack lowercase to 5 bits, and uppercase and some special symbols to 10 bits, and it will be smaller if uppercase are rare