C Programming - Structures, Unions, Enums - Discussion

3. 

What will be the output of the program ?

#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;
}

[A]. 1, 2, 13
[B]. 1, 4, 4
[C]. -1, 2, -3
[D]. -1, -2, -13

Answer: Option C

Explanation:

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.


Sathya said: (Feb 16, 2011)  
I don't understand the declaration part.

int bit1:1;
int bit3:4;
int bit4:4;

Can anyone explain it briefly?

Krishna said: (Feb 23, 2011)  
I am not understanding this explanation please give brief explanation.

Meril said: (Mar 13, 2011)  
What is this "int bit1:1;" means?

Please help!

Yoge said: (Mar 16, 2011)  
int bit1:1 means that only 1 bit of memory is allocated for the variable bit1, bit fields are used to save memory, whenever a variable holds small value you need not allocate the integer size of 2 bytes.

Nikhil said: (Aug 25, 2011)  
What is this "int bit1:1;" means?

I can't understand please anyone help me ?

Am12cs said: (Aug 27, 2011)  
Bit is datatype of type int having binary values b/w 0 to 2^n -1
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.

Pnss said: (Sep 3, 2011)  
Thnks yoge.

Aavi said: (Dec 1, 2011)  
Please explain with diagram.

Nidhinpradeep said: (Sep 22, 2012)  
Syntax for bit fieldis.
Type variable:num of bits;.
Eg; int i:2;.
Here for I only 2 bits is allocated in memmory.

Ramesh said: (Jan 2, 2013)  
The value of 3 is positive but why we are taking as -3 please some one can explain this problem?

Priya said: (Jul 4, 2013)  
signed int = -2^15 to +2^15.

bit1 have 1 bit hence we can use 0001. The zero is un available data hence the system takes started left to right. in left it is -sign.

Hence we get -1.. if we use bit1:2 bit we can get +1 output. coz 00(01)used.... Bit 3 : 4 i.e : 0000 the value is 13.

Hence 1101 almost the all value filled so system takes same like "1". It is is 5. we can use 01101 almost the right is filled hence we get "+13"

Sourav said: (Jul 8, 2013)  
Why it is printing in 2's complement form?

Swati said: (Nov 9, 2013)  
If I declare int bit2:4 and value assigned to bit2 is 2 then output is coming 2 this one is right but when I am declaring.

int bit2:1 and value assigned the same as 2 then output is coming 0 why this zero output is coming I am not getting can anyone explain me?

Swapnil said: (Dec 19, 2013)  
@Swati.

Bit2:1 means that only 1 bit of memory is allocated for the variable bit2.
How we assign value 2 (binary 10) to 1 bit value. So output is coming 0.

In bit2: 4, 4 bit of memory is allocated.

So binary 0010 is stored. Left most bit is 0, so system will treat it as positive value. So output is 2.

Remember Me!! said: (Jan 3, 2014)  
WHAT IS BIT FIELD AND WHY BIT FIELD?

Example:

a = 2 = 0010
In bit field "int a:2" means you just use 2 bit value of 0010
therefore,
int a:2 = 10.

Another example:

In bit field "int a:3" means you just use 3 bit value of 0010
therefore,

int a:2 =010.

Vek said: (Nov 1, 2014)  
I am unable to understand this program. I would like to understand this program.

So can any body help me?

Gowtham said: (Aug 20, 2015)  
Why 1's and 2's complement taken in this problem?

Ayushi said: (Aug 20, 2015)  
The left most bit in int bit 1:1 is 0. So how can it can be treated as a negative number?

Because 1 is expressed as 0001 in binary. Please explain this.

Sudha said: (Dec 29, 2016)  
The bit 1:1 occupies only 1 bit.

Let's assume bit1=1 (0001)its 2's compliment is (1111) leftmost bit represents -ve value.

Mansi said: (Sep 4, 2017)  
I didn't get the "If you store 13 in 4-bits field" part.
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.

WHY -3? The leftmost digit is 0 so it should be 3 right?

Sanjana said: (Jul 16, 2018)  
@Mansi,

As you are calculating the two's complement of 13 that it's a negative number and hence you will have to append a negative sign in the answer.

Narsi said: (Jun 9, 2019)  
Thanks @Priya.

Mahi said: (Feb 26, 2020)  
Bit1: 1 means it will be stored only one bit like (eg: 1 binary stored in 1 bit only).

So in a first bit it will take left as well as right most bit is 1 because here only 1 bit memory available.

Bit2: 4 means it will be stored 4 bit like (eg: 2 binary stored in 4 bit only).

So 4 = 0100, here left most bit is 0 that's why we didn't took 2's complement here and print value 2 as is it.

Bit3: 4 means it will be also stored 4 bit like (eg: 13 binary stored in 4 bit only).

So 13 = 1101, here left most bit is 1 that's why we took 2's complement here and print changeable value.

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.