C Programming - Bitwise Operators - Discussion

Discussion Forum : Bitwise Operators - Point Out Correct Statements (Q.No. 1)
1.
Which of the following statements are correct about the program?
#include<stdio.h>

int main()
{
    unsigned int num;
    int i;
    scanf("%u", &num);
    for(i=0; i<16; i++)
    {
        printf("%d", (num<<i & 1<<15)?1:0);
    }
    return 0;
}
It prints all even bits from num
It prints all odd bits from num
It prints binary equivalent num
Error
Answer: Option
Explanation:

If we give input 4, it will print 00000000 00000100 ;

If we give input 3, it will print 00000000 00000011 ;

If we give input 511, it will print 00000001 11111111 ;

Discussion:
19 comments Page 2 of 2.

Uma shnakr said:   1 decade ago
for(i=0; i<16; i++)
{
printf("%d", (num<<i & 1<<15)?1:0);
}

Lets assume num = 2.

Then num<<0 =0000 0000 0000 0100 & (1000 0000 0000 0000 this is 1<<15) = (all 0 so false condion so 0
PRINT 0
printed yet=0

same repeat

Then num<<1 =0000 0000 0000 1000 & (1000 0000 0000 0000 this is 1<<15)= (all 0 so false condion so 0
PRINT 0
printed yet=00

Then num<<2 =0000 0000 0000 1000 & (1000 0000 0000 0000 this is 1<<15)= (all 0 so false condion so 0
PRINT 0
printed yet=000
...............

AT 14 LOOP POSITION
Then num<<14 =1000 0000 0000 0000 & (1000 0000 0000 0000 this is 1<<15)= (all 1000 0000 0000 0000 so TRUE condion so 1
PRINT 1
printed yet=000000000000001
0000 0000 0000 0100

AT 15 LOOP POSITION
Then num<<15 =1000 0000 0000 0000 & (1000 0000 0000 0000 this is 1<<15)= (all 1000 0000 0000 0000 so TRUE condion so 1
PRINT 0
printed yet=0000000000000010

hence finaly we have 0000000000000010=2

Haritha said:   1 decade ago
Please explain it more clearly.

BHAKAR said:   1 decade ago
for(i=0; i<16; i++)
{
printf("%d", (num<<i & 1<<15)?1:0);
}

Lets assume num = 4.

Then num<<0 =0000 0000 0000 0100 & (1000 0000 0000 0000 this is 1<<15) = (all 0 so false condion so 0
PRINT 0
same repeat

Then num<<1 =0000 0000 0000 1000 & (1000 0000 0000 0000 this is 1<<15)= (all 0 so false condion so 0
PRINT 0
AT 14 LOOP POSITION

Then num<<14 =1000 0000 0000 0000 & (1000 0000 0000 0000 this is 1<<15)= (all 1000 0000 0000 0000 so TRUE condion so 1
PRINT 1
0000 0000 0000 0100

Prem said:   1 decade ago
If the condition is true it will print as 1 otherwise 0.

Sadhna said:   1 decade ago
Hi, I have a doubt in printf statement it will print either 0 or 1 as we are printing the result of a conditional statement, can someone explain this to me ?

Ankit said:   1 decade ago
Please explain it clearly.

Abhishek said:   1 decade ago
@Mohanty
num<<i
shifts one bit, so to shift 16 bits the condition is set as i<16

Mohanty said:   1 decade ago
What is "i<16"?

Viraj said:   1 decade ago
1 <<15 = -32768 i.e. 1000 0000 0000 0000

In the loop the bits of 'num' are brought to the MSB one by one using left shift and ANDed with the 1000 0000 0000 0000


Post your comments here:

Your comments will be displayed after verification.