我正在查看一些考试任务到我的信息学课程,并在其中一个中遇到了令人困惑的代码:
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;
}
答案 0 :(得分:4)
如果在布尔上下文中使用任何数字类型,则非零数字变为true
,零变为false
。转换是隐含的,因此您不必执行任何特殊操作,如上例所示。
答案 1 :(得分:2)
整数结果隐式转换为bool,遵循非零值为真(包括负数)的规则。
以下内容会更加明确:while((a % b) != 0)
答案 2 :(得分:0)
只要满足条件,循环就会继续运行,条件可以是布尔值,但它也可以是任意数字,在这种情况下,“0”的计算结果为“假”,而“0”以外的任何值都计算为'真正的'。
你的循环将继续运行,直到模运算的结果为'0',即当b是a的倍数时!
干杯!