我必须编写一个函数来计算传入的 unsigned int 的 log base 16 的底。对于我们允许使用的运算符和常量有限制,我们只能使用特定的for
循环。
为清楚起见,我们不能使用任何条件语句(if、else、switch ...)。函数原型为:
int floor_log16(unsigned int x);
允许的运算符:++
--
=
&
|
~
^
<<
!
>>
允许的常量:1
2
3
4
8
16
我写了一个版本的程序如下:
int floor_log16(unsigned int x) {
int index=1;
int count=(1!=1);
count--;
for(; index<=x; index<<=4) {
count++;
}
return count;
}
这似乎可以按需要工作。但是,我意识到,基于后面的功能和我们必须编写的所需功能的描述,我注意到有时在“允许的运算符”下>
并被<
列出。
我推断这意味着因为对于floor_log16
上面列出的函数,我们没有被明确告知使用>
or <
,我只能假设上面发布的解决方案不会被接受。
这让我很困惑,因为我不明白你怎么可能有一个没有布尔检查的 for 循环?
满足条件时循环迭代的整个想法不是吗?