C Programming - Bitwise Operators - Discussion

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

[A]. It prints all even bits from num
[B]. It prints all odd bits from num
[C]. It prints binary equivalent num
[D]. Error

Answer: Option C

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 ;


Viraj said: (Nov 21, 2010)  
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

Mohanty said: (Aug 6, 2011)  
What is "i<16"?

Abhishek said: (Sep 19, 2011)  
@Mohanty
num<<i
shifts one bit, so to shift 16 bits the condition is set as i<16

Ankit said: (Dec 26, 2011)  
Please explain it clearly.

Sadhna said: (Jan 21, 2012)  
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 ?

Prem said: (Jan 30, 2012)  
If the condition is true it will print as 1 otherwise 0.

Bhakar said: (Feb 6, 2012)  
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

Haritha said: (Aug 24, 2012)  
Please explain it more clearly.

Uma Shnakr said: (Aug 28, 2012)  
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

Mahendra said: (Sep 30, 2012)  
correct one goes below

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
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 00
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 13 LOOP POSITION
Then num<<13 =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=0000000000001
0000 0000 0000 0100

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

hence finaly we have 000000000000100=4

Vishal Singh said: (Jun 13, 2014)  
Sir I had executed this one and.

Answer is,
0100011101111000.

Since it is.
An conditional operator.
Asked to give 0.
Or 1 as a output.

Kannan said: (Jul 19, 2015)  
Why the program print binary value. What cmd?

Anu Mishrs said: (Sep 13, 2016)  
No, this program is not giving output correctly only it give 1 or 0 due to conditional operator.

Bishal said: (Jan 24, 2018)  
What is %u in scanf?

Rvm said: (Apr 5, 2018)  
%u means? Please explain in detail.

Radhey said: (Aug 28, 2018)  
Unsigned means?

Vartika said: (Oct 7, 2018)  
I don't understand when I write %u in scanf, how is it behaving like %d?

Pavan said: (Sep 2, 2020)  
Unsigned means its a datatype like int but it is type modifier i.e,int has 2 bytes of memory means it stores values from -327768 to 32767 it is specified as %d similarly unsigned also has 2 bytes(size) from 0 to 65535 specifier %u.

Pavan Anjali said: (Aug 28, 2021)  
If the int takes only positive values it is unsigned and signed means int takes both positive and negative numbers. As we know %c means char reads, %f means float reads.

Similarly %d means signed values read (both + answer -) and %u means unsigned values read-only + values.

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.