Related Articles
GATE | GATE CS 2018 | Question 47
• Difficulty Level : Medium
• Last Updated : 01 Feb, 2019

Consider the following C code. Assume that `unsigned long int` type length is 64 bits.

 `unsigned ``long` `int` `fun(unsigned ``long` `int` `n) {``        ``unsigned ``long` `int` `i, j = 0, sum = 0;``        ``for``( i = n; i > 1; i = i/2) j++;``        ``for``( ; j > 1; j = j/2) sum++;``        ``return` `sum;``}`

The value returned when we call `fun` with the input 240 is

(A) 4
(B) 5
(C) 6
(D) 40

 `// n takes 2^40``unsigned ``long` `int` `fun(unsigned ``long` `int` `n) {`` ` `        ``// initialized sum = 0 ``        ``unsigned ``long` `int` `i, j = 0, sum = 0;``            ` `        ``//First it takes i = n = 2^40, ``        ``//then it divides i by 2 and incremented once j``        ``//each time, that's will make makes j = 40,``        ``for``( i=n; i>1; i=i/2) j++; `` ` `        ``//Now the value of j = 40,``        ``//it divides j by 2 and incremented once sum``        ``//each time, that's will make makes sum = 5,``        ``for``( ; j>1; j=j/2) sum++;`` ` `        ``//returns sum = 5``        ``return` `sum;``}`