@cm0002@lemmy.world to Programmer Humor@programming.dev • 1 day agoTell me the truth ...piefed.jeena.netimagemessage-square99fedilinkarrow-up1953
arrow-up1953imageTell me the truth ...piefed.jeena.net@cm0002@lemmy.world to Programmer Humor@programming.dev • 1 day agomessage-square99fedilink
minus-square@KindaABigDyl@programming.devlinkfedilink166•1 day agotypedef struct { bool a: 1; bool b: 1; bool c: 1; bool d: 1; bool e: 1; bool f: 1; bool g: 1; bool h: 1; } __attribute__((__packed__)) not_if_you_have_enough_booleans_t;
minus-square@h4x0r@lemmy.dbzer0.comlinkfedilinkEnglish13•19 hours agoThis was gonna be my response to OP so I’ll offer an alternative approach instead: typedef enum flags_e : unsigned char { F_1 = (1 << 0), F_2 = (1 << 1), F_3 = (1 << 2), F_4 = (1 << 3), F_5 = (1 << 4), F_6 = (1 << 5), F_7 = (1 << 6), F_8 = (1 << 7), } Flags; int main(void) { Flags f = F_1 | F_3 | F_5; if (f & F_1 && f & F_3) { // do F_1 and F_3 stuff } }
minus-square@anotherandrew@lemmy.mixdown.calinkfedilinkEnglish1•edit-27 hours agoWhy not if (f & (F_1 | F_3)) {? I use this all the time in embedded code. edit: never mind; you’re checking for both flags. I’d probably use (f & (F_1 | F_3)) == (F_1 | F_3) but that’s not much different than what you wrote.
minus-square@xthexder@l.sw0.comlinkfedilink35•edit-21 day agoOr just std::bitset<8> for C++. Bit fields are neat though, it can store weird stuff like a 3 bit integer, packed next to booleans
minus-squareSonotsugipaalinkfedilinkEnglish10•edit-21 day agoThat’s only for C++, as far as I can tell that struct is valid C
This was gonna be my response to OP so I’ll offer an alternative approach instead:
typedef enum flags_e : unsigned char { F_1 = (1 << 0), F_2 = (1 << 1), F_3 = (1 << 2), F_4 = (1 << 3), F_5 = (1 << 4), F_6 = (1 << 5), F_7 = (1 << 6), F_8 = (1 << 7), } Flags; int main(void) { Flags f = F_1 | F_3 | F_5; if (f & F_1 && f & F_3) { // do F_1 and F_3 stuff } }
Why not
if (f & (F_1 | F_3)) {
? I use this all the time in embedded code.edit: never mind; you’re checking for both flags. I’d probably use
(f & (F_1 | F_3)) == (F_1 | F_3)
but that’s not much different than what you wrote.Or just
std::bitset<8>
for C++. Bit fields are neat though, it can store weird stuff like a 3 bit integer, packed next to booleansThat’s only for C++, as far as I can tell that struct is valid C
You beat me to it!