对于没有第二个条件的循环,即布尔检查?

Art*_*llé 6 c loops for-loop

我必须编写一个函数来计算传入的unsigned int的日志库16的底限.对于允许使用哪些运算符和哪些常量有限制,我们只能使用专门的for循环.

为清楚起见,我们不能使用任何条件语句(如果,否则,切换...).功能原型是:

int floor_log16(unsigned int x); 
Run Code Online (Sandbox Code Playgroud)

允许的运营商: ++ -- = & | ~ ^ << ! >>

允许的常数: 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;
}
Run Code Online (Sandbox Code Playgroud)

这看似按预期工作.但是,我意识到,根据后来的功能和所需的功能,我们必须编写说明,我注意到,在"允许运营商"有时><上市.

我推断这意味着,因为对于floor_log16上面列出的函数,我们没有明确告知使用><,我只能假设上面发布的解决方案不被接受.

这让我很困惑,因为我不明白你怎么可能有一个没有布尔检查的for循环?

在条件满足时,不是循环迭代的整个想法吗?

kir*_*gin 5

好吧,首先,for没有布尔检查的-loop非常好.例如,

for (;;)
Run Code Online (Sandbox Code Playgroud)

是一种常见的写作方式

while (true)
Run Code Online (Sandbox Code Playgroud)

其次,使用for-loop与其他部分但没有布尔检查仍然有用,因为您可以使用return或退出它break.

最后一件事.有很多方法可以在不使用<和的情况下获取布尔值>.例如,您可以简单地i用来检查i != 0等等.

例如,如果您想检查a < b是否可以检查(a - b) < 0.使用按位运算符实现加法(因此减法)是一个众所周知的面试问题(你应该自己尝试这样做,这很有趣),并且检查你int的负面情况就像查看其最重要的位一样容易.