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

Explanation:

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