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;
}
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 1 of 2.
Mahendra said:
1 decade ago
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
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
(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
{
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
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
{
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
Pavan anjali said:
4 years ago
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.
Similarly %d means signed values read (both + answer -) and %u means unsigned values read-only + values.
Pavan said:
5 years ago
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.
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
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
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 ?
Vishal singh said:
1 decade ago
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.
Answer is,
0100011101111000.
Since it is.
An conditional operator.
Asked to give 0.
Or 1 as a output.
Anu mishrs said:
9 years ago
No, this program is not giving output correctly only it give 1 or 0 due to conditional operator.
Abhishek said:
1 decade ago
@Mohanty
num<<i
shifts one bit, so to shift 16 bits the condition is set as i<16
num<<i
shifts one bit, so to shift 16 bits the condition is set as i<16
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers