C Programming - Structures, Unions, Enums - Discussion

Discussion Forum : Structures, Unions, Enums - Find Output of Program (Q.No. 3)
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;
}
1, 2, 13
1, 4, 4
-1, 2, -3
-1, -2, -13
Answer: Option
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.

Discussion:
24 comments Page 2 of 3.

Priya said:   1 decade ago
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:   1 decade ago
Why it is printing in 2's complement form?

Swati said:   1 decade ago
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:   1 decade ago
@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:   1 decade ago
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:   1 decade ago
I am unable to understand this program. I would like to understand this program.

So can any body help me?

Gowtham said:   10 years ago
Why 1's and 2's complement taken in this problem?

Ayushi said:   10 years ago
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:   8 years ago
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:   8 years ago
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?


Post your comments here:

Your comments will be displayed after verification.