# C Programming - Structures, Unions, Enums - Discussion

```
#include<stdio.h>
int main()
{
struct value
{
int bit1:1;
int bit3:4;
int bit4:4;
}bit={1, 2, 13};
printf("%d, %d, %d\n", bit.bit1, bit.bit3, bit.bit4);
return 0;
}
```

Note the below statement inside the struct:

*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).

Therefore **-1** is printed.

**If you store 2 in 4-bits field:**

Binary 2: 0010 (left most bit is 0, so system will treat it as positive value)

0010 is 2

Therefore **2** is printed.

**If you store 13 in 4-bits field:**

Binary 13: 1101 (left most bit is 1, so system will treat it as negative value)

Find 2's complement of 1101:

1's complement of 1101 : 0010

2's complement of 1101 : 0011 (Add 1 to the result of 1's complement)

0011 is 3 (but negative value)

Therefore **-3** is printed.

int bit1:1;

int bit3:4;

int bit4:4;

Can anyone explain it briefly?

Please help!

I can't understand please anyone help me ?

here INT BIT1:1 means an SIGNED INTEGER .

int can have both positive , negative and zero valu.

Signed integer store using 2`s complement method and un signed can by 1's complement method.

Now we need signed integer because of modern arithmetic needs ie Short integer(16 bits) long (32 bits) double (64) , using unsigned here will result in overflow, trancation.

Representation::

In signed the the legt most bit is used to check weather it an postive or negative number.

what is bit1:1??

bit 1:1 means one bit feild, since computer stores data in bit pattern , only one bit space is available to satisfy what ever may be the Contain of bit.

ex:

int bit7 : 2 ;

int bit5 :7

{

bit{2,4,5,1}

}

pf("%d", bit.bit7 ,bit.bit5 );

here only two byte will be available to preprocessor for allocating 0011 (2 in 2`s complement form) , bit7 is just a name .

int bit5 :7

it will provide 7 bits space to proceessor to allocate (0101)4 in 2`s complement.

Now we have to check weather it an positive or negative ::

In c (0 stnds for +) and (1 stnds for -)

in signed int we have to check Lhs of 2`s complemented integer.

In case of 4(0101) lhs is '0' ie it a +ve number

If lhs comes out '1' it an negative number.

Type variable:num of bits;.

Eg; int i:2;.

Here for I only 2 bits is allocated in memmory.