📜  门| GATE CS 2018 |简体中文第47章

📅  最后修改于: 2021-06-29 20:10:46             🧑  作者: 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时返回的值为

(A) 4
(B) 5
(C) 6
(D) 40答案: (B)
解释:

// 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。
这个问题的测验