首页 > 试题广场 >

下列代码,循环了多少次

[单选题]
下列代码,循环了多少次
int k = 2000;
while (k > 1) {
    k = k >> 1;
}
  • 10
  • 11
  • 12
  • 20
>>是位移符号。可以理解为每次除以2. 
从k=2000直到k=1,共需10次位移操作
发表于 2016-12-21 16:19:26 回复(2)
没到2048,10次就好了
发表于 2021-02-20 22:02:10 回复(0)
2000有11位,到了最后一位不执行。
发表于 2022-05-18 08:46:50 回复(0)
#include <stdio.h>

int main(int argc, char const *argv[])
{
    int k = 2000;
    int i=0;
    while(k>1)
    {
        i++;
        k = k >> 1;
        printf("i = %d k = %d\n",i,k);
    }
    printf("%d\n",i);
    return 0;
}
>> 右移运算符  等价于 除以2  除的时候会丢失精度。
<< 左移运算符 等价于 乘以2
若考虑小数的话,2的10次1024    2000 / 1024 > 1  答案应为11  有个问题是 位移运算符只能位移整数,而不能移动小数。

但这是int类型,故答案为10.

发表于 2023-09-06 21:09:07 回复(1)

初始时 k 的值为 2000,然后通过右移操作使 k 不断减半,直到 k 的值小于或等于 1 为止。让我们来逐步观察 k 的变化:

  • 初始值:k = 2000 (二进制表示为 11111010000)
  • 右移一位后:k = 1000 (二进制表示为 1111101000)
  • 右移一位后:k = 500 (二进制表示为 111110100)
  • 右移一位后:k = 250 (二进制表示为 11111010)
  • 右移一位后:k = 125 (二进制表示为 1111101)
  • 右移一位后:k = 62 (二进制表示为 111110)
  • 右移一位后:k = 31 (二进制表示为 11111)
  • 右移一位后:k = 15 (二进制表示为 1111)
  • 右移一位后:k = 7 (二进制表示为 111)
  • 右移一位后:k = 3 (二进制表示为 11)
  • 右移一位后:k = 1 (二进制表示为 1)
当 k 的值变为 1 时,循环停止,因此循环次数为10次。
发表于 2023-11-09 19:25:23 回复(0)
1024<2000<2048,所以2000转换成二进制会是01X XXXX XXXX。每次循环右移一位,右移10次之后变量就成为000 0000 0000了。
发表于 2024-03-18 10:38:11 回复(0)
右移可以理解为除以二 而且2000只有11位 2048有12位 右移的话也只需要移十位就满足条件了
发表于 2023-08-10 21:57:41 回复(0)
1024是2的10次方,2048是2的11次方,每次右移,移10就为1了,正好满足条件,k > 1。
发表于 2022-08-31 07:48:28 回复(0)
1 2 4 8 16 32 64 128 256 512 1024 2048
发表于 2022-08-16 17:32:23 回复(0)
>>:右移运算符,num >> 1,相当于num除以2
发表于 2022-01-11 04:32:22 回复(0)