if wasting a byte or seven matters to you, then then you need to be working in a lower level language.
Programmer Humor
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
- Keep content in english
- No advertisements
- Posts must be related to programming or programmer topics
Joke’s on you, I always use 64 bit wide unsigned integers to store a 1 and compare to check for value.
So does the cpu
I have a solution with a bit fields. Now your bool is 1 byte :
struct Flags {
bool flag0 : 1;
bool flag1 : 1;
bool flag2 : 1;
bool flag3 : 1;
bool flag4 : 1;
bool flag5 : 1;
bool flag6 : 1;
bool flag7 : 1;
};
Or for example:
struct Flags {
bool flag0 : 1;
bool flag1 : 1:
int x_cord : 3;
int y_cord : 3;
};
boolean bloat
I first thought you wrote boolean float, not sure if that's even worse.
True.
Well storing that would only take half a bit.
just like electronic components, they sell the gates by the chip with multiple gates in them because it's cheaper
Are you telling me that no compiler optimizes this? Why?
Well there are containers that store booleans in single bits (e.g. std::vector<bool>
- which was famously a big mistake).
But in the general case you don't want that because it would be slower.
This reminds me that I actually once made a class to store bools packed in uint8 array to save bytes.
Had forgotten that. I think i have to update the list of top 10 dumbest things i ever did.
We need to be able to express 0 and 1 as integers so that functionality is just being overloaded to express another concept.
Wait until the person who made this meme finds out about how many bits are being wasted on modern CPU architectures. 7 is the minimum possible wasted bits but it would be 31 on every modern computer (even 64b machines since they default to 32b ints).
3GPP has an interesting way of serialising bools on the wire with ASN.1
NULL OPTIONAL
meaning only the type would be stored if true, otherwise it won't be set at all
This guy never coded in KEIL C on an 8051 architecture. They actually use bit addressable RAM for booleans. And if you set the compiler to pass function parameters in registers, it uses the carry flag for the first bit or bool type parameter.
Wait till you realise the size of SSD sectors
I swore I read that mysql dbs will store multiple bools in a row as bit maps in one byte. I can't prove it though