Comment by rep_lodsb
14 hours ago
They should have defined true as -1 (all bits set) instead, as in some other languages like Forth and BASIC.
14 hours ago
They should have defined true as -1 (all bits set) instead, as in some other languages like Forth and BASIC.
-1 is not -1 for different sizes of integers. Which exact -1 do you want? 32-bit? 64-bit? int-sized (as int is defined in current implementation)? With current approach it's simple, boolean type is expected to have 1-bit size (which is rounded to 8 bits if stored in memory).
If bool was a signed 1-bit type (i.e. having possible values of either 0 or -1), it could be extended to any size, same as an integer?
Of course we can't have that now, because unsigned bool is baked into the C language standard, and even into processors (x86 SETcc instruction). While "char" being signed or not is still implementation-defined IIRC...
The obvious fix is to allow programmers to opt into this by writing `signed bool`.
You have some expectations of the size of the bool (it's simply 1 bit but also 8 bits.)
What expectations do you have of the value?
Bool should be logically 1-bit, when stored in memory only least significant bit should be used and the rest is allowed to be garbage. Such approach gives compilers as much room for optimizations as possible. Forcing them writing some specific bit-pattern may lead to suboptimal code generation.
12 replies →