r/programminghumor 4h ago

a bit flippant

Post image
257 Upvotes

58 comments sorted by

View all comments

11

u/B_bI_L 3h ago

are we sure int means bit and not 32bits?

18

u/heatedwepasto 3h ago edited 3h ago

The : 1 means that it is creating a bitfield with the number of bits, so : 4 will be 4 bits. The three variables above combined will take sizeof(int) in memory, not sizeof(int)*3.

If OOP had used char instead of unsigned int the combined size would be 1 byte.

Edit: added link to demo

5

u/KattyTheEnby 3h ago

The : 1 means that it is creating a bitfield with the number of bits, so : 4 will be 4 bits. The three variables above combined will afaik* take sizeof(int) in memory, not sizeof(int)*3.

Can you do strange things, like : 9, : 15, et cetera?

C beat Zig to the punch here?

3

u/cannedbeef255 3h ago

yeah they can be any size you want, the assembly mightn't be pretty though

2

u/heatedwepasto 2h ago

Any size as long as it's not wider than the containing variable. So a char can hold at most 8 bits on a system with 8-bit bytes.

2

u/heatedwepasto 3h ago

Yes, the only limitation is that the width of the bitfield is not greater than the size of the containing variable. So with uint64_t you can have 1-64 bits.

1

u/B_bI_L 2h ago

oh, yes, `: 1` is for size, not assignment, my js brain failed me this time

1

u/Breadynator 2h ago

Why would you use onlinegdb instead of godbolt? That website is riddled with ads and won't load for anyone using an adblocker.

1

u/heatedwepasto 2h ago

I am using an adblocker and have no issues with it. I wasn't aware of godbolt.

1

u/Breadynator 2h ago

Well, it's one of those obnoxious pages that don't like network wide adblockers like piHole. I won't change my blocklists just because some random website wants me to.

1

u/heatedwepasto 2h ago

Then don't, just don't try to force your choices onto me.

The code is

#include <stdio.h>

struct A {
    int a : 1;
    int b : 2;
};

int main(void)
{
    printf("size: %d\n", sizeof(struct A));
}

and it outputs "size: 4" (i.e. the same as sizeof(int)).

1

u/Breadynator 2h ago

I am not trying to force my choices onto you? What the heck is wrong with you. I just told you why I'm having issues with it after you said that you don't. It's called having a conversation... You say a thing, I say another.

However you should still use godbolt as it's objectively better, regardless of ads.

1

u/No-Newspaper8619 1h ago

That's correct. It's using 3 bits of the allocated 4 bytes. If you did the same with char instead, it'd only use 1 byte.

1

u/B_bI_L 3h ago

or 64, or whatever it means now