📜  门| GATE CS 2018 |第 47 题

📅  最后修改于: 2021-09-26 03:45:06             🧑  作者: Mango

考虑以下 C 代码。假设unsigned long int类型长度为 64 位。

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

当我们用输入 2 40 fun时返回的值是

(一) 4
(乙) 5
(三) 6
(四) 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;
}

所以,答案是5。
这个问题的测验