[Beginner, C] If we can represent true/false with 1/0, why do we need the stdbool library and boolean variables?

https://programming.dev/post/47210489

[Beginner, C] If we can represent true/false with 1/0, why do we need the stdbool library and boolean variables? - programming.dev

I saw one example int x = 10; int y = 5; bool isGreater = x > y; printf("%d", isGreater); But I could write this int x = 10; int y = 5; printf("%d", x > y); I am a compete beginner and I have no real reason why I would or would not want to deal boolean variables, but I want to understand their raison d’être.

I think there are several reasons. First, if you do it with an int, you’re probably using up 32bits per value. You’d need 1 but waste the other 31, they needlessly take up storage. And then sometimes it’s nice to be expressive. So no one needs to remember if 1 is True or 0, or if True is greater than False, whether 2 or -1 map to True or False. And you end up in situations where either 2 equals 1, or True isn’t equal True. Or you do weird things with Undefined. All of that can be avoided and the code gets more readable with specific types.

First, if you do it with an int, you’re probably using up 32bits per value.

One project I worked with stored boolean values as bits in an 8-bit int, and then used binary math to read and write individual bits from that int, with each bit representing a distinct and independent boolean variable.

Really weird, complicated, and sounds kind of dumb … but it worked, and it was extremely memory-efficient.

Oh hey I do this in jwts too.

I need to encode a lot of permissions

Don’t ask

C++ actually does this ‘optimisation’ for std::vector<bool>. I say ‘optimisation’ because it effectivesly trades time for space, which is usually the opposite of what you want - space is cheap, time usually isn’t. Sometimes it’s a good tradeoff though - it’s common in embedded development where you might only have a few kB of RAM.