+15 votes
2.9k views

Consider the function func shown below:

int func(int num) {
int count = 0;
while (num) {
count++;
num>>= 1;
}
return (count);
} 

The value returned by func($435$) is ________

edited | 2.9k views
0

will left shift will in multiplication?

0
yes
0
Operator is right shift. >>

## 4 Answers

+23 votes
Best answer

Answer is $9$.

$435-(110110011)$

num $>>=$ $1$; implies a num is shifted one bit right in every while loop execution.While loop is executed $9$ times successfully and $10$th time num is zero.

So count is incremented $9$ times.

Note:

Shifting a number "1"bit position to the right will have the effect of dividing by $2$:

8 >> 1 = \$4    // In binary: (00001000) >> 1 = (00000100)
by Active (4.6k points)
edited
0
doubt: why we are not considering the storing technique like little endian or big endian.. in C int take 16 bits if we consider big endian [uper bytes take lower address and lower bytes take upper address] then answer is fine but what if little endian...?
+14 votes
int func(int num) // take decimal number
{
int count = 0;
while (num) // until all bits are zero
{
count++; // count bit
num>>= 1; // shift bits, removing lower bit
}
return (count); // returns total number of bits
} 

(435)10 = (110110011)2
So, the given program counts total number of bits in binary representation . Hence, answer is 9

http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer

by Active (5.1k points)
reshown
+3 votes

The function mainly returns position of Most significant bit in binary representation of n. The MSD in binary representation of 435 is 9th bit.

Another explanation : >> in right shift. In other words, it means divide by 2. If keep on dividing by 2, we get: 435, 217, 108, 54, 27, 13, 6, 3, 1. Therefore, the count is 9.

by Loyal (9.3k points)
edited
0
MSB not MSD
+1 vote
count=9
by Active (1k points)
Answer:

+15 votes
4 answers
1
+18 votes
3 answers
2
+18 votes
7 answers
3
+24 votes
6 answers
4
+26 votes
2 answers
7