+ 10

How to calculate size of data types in C?

See the below Code. It's a challenge question and size is coming 8. How? Anyone please can explain? #include <studio.h> typedef struct { int bit1 : 1; int bit2 : 2; int bit30 : 30; } bits; int main() { printf("%d", sizeof(bits)); return 0; } output : 8

3rd Sep 2020, 10:47 AM
A͢J
A͢J - avatar
10 Answers
+ 15
int bit1:1; --> 'int' indicates that it is a SIGNED integer. For signed integers the leftmost bit will be taken for +/- sign. If you store 1 in 1-bit field: The left most bit is 1, so the system will treat the value as negative number. The 2's complement method is used by the system to handle the negative values. Therefore, the data stored is 1. The 2's complement of 1 is also 1 (negative). Now in the q all 3 declarations are there => Bit1:1 Binary is 1 2's compliment is 0 So,1 bit =>Bit2:2 Binary is 10 2's compliment is 01 So,2 bits =>Bit30:30 Binary is 11110 2s compliment is 00001 So,5bits So 1+2+5=8 Sizeof() will be a bit representation
3rd Sep 2020, 11:45 AM
chaithra Gowda
chaithra Gowda - avatar
+ 13
The struct contains bit fields (reference -> https://en.cppreference.com/w/cpp/language/bit_field). The type for the members here are `int`, which is (commonly) a 32bit integer. But if we sum the total of bits set, we get 33 (1 + 2 + 30). For that reason, compiler allocates 8 bytes (64bits) memory for each struct instance. Because allocating 4 bytes (32bits) is not enough to contain all the bits needed by the struct members. Hth, cmiiw
3rd Sep 2020, 11:27 AM
Ipang
+ 6
Use sizeof operator it can be applied to structures as well 🙄
4th Sep 2020, 3:11 AM
Sanjay Kamath
Sanjay Kamath - avatar
+ 6
Sanjay Kamath sizeof() is already being used in the program.
4th Sep 2020, 10:59 PM
Sonic
Sonic - avatar
+ 5
Interesting question to Learn a new concept... 33bits with rounded up to 64bits for storage Thanks for this.... https://www.tutorialspoint.com/cprogramming/c_bit_fields.htm
3rd Sep 2020, 1:28 PM
Jayakrishna 🇮🇳
+ 5
Alaska , colons are needed when defining a bit field.
4th Sep 2020, 11:00 PM
Sonic
Sonic - avatar
+ 4
Sonic Ohh, never learned about this bit thing. Thanks, I will check it today.
5th Sep 2020, 4:20 AM
Alaska
Alaska - avatar
+ 3
what is that colon for? As far as I have learned, struct variables cannot be initialized at declaration. If those colons and values are removed then works fine.
3rd Sep 2020, 11:27 AM
Alaska
Alaska - avatar