在一个while循环中的奇怪条件

时间:2014-07-27 20:21:40

标签: c++ while-loop

我正在查看一些考试任务到我的信息学课程,并在其中一个中遇到了令人困惑的代码:

while(a % b) {
//body of the loop
}

我确信条件应该是类型bool但是应用于两个整数的模运算符%返回类型为int的除法的余数。我试图运行这个代码,它的工作原理,但我仍然感到困惑,它是如何工作的。我在while语句的属性中缺少什么?

对不起,如果这是一个不那么聪明的问题,有一段时间没有进入信息学。

如果有必要,这是我从中获取的函数的全部内容:

int foo (int a, int b){
    int t;
    while(a % b) {
        t = a;
        a = b;
        b = t % b;
    }
    return b;
}

3 个答案:

答案 0 :(得分:4)

如果在布尔上下文中使用任何数字类型,则非零数字变为true,零变为false。转换是隐含的,因此您不必执行任何特殊操作,如上例所示。

答案 1 :(得分:2)

整数结果隐式转换为bool,遵循非零值为真(包括负数)的规则。

以下内容会更加明确:while((a % b) != 0)

答案 2 :(得分:0)

只要满足条件,循环就会继续运行,条件可以是布尔值,但它也可以是任意数字,在这种情况下,“0”的计算结果为“假”,而“0”以外的任何值都计算为'真正的'。

你的循环将继续运行,直到模运算的结果为'0',即当b是a的倍数时!

干杯!