C++ 中 'x % y != 0' 的机制

Mechanics of 'x % y != 0' in C++

有人可以用 C++ 解释 x % y !=0 的底层机制吗?如果整数除法中没有余数,它的计算结果为 0,如果有任何数量的余数,它的计算结果为 1。我发现这非常有用,但我想了解发生了什么,因为语法对我来说并不直观。

我在一个单独的线程中发现了这个,我没有权限在其中发表评论:

Fast ceiling of an integer division in C / C++

谢谢。

(请原谅任何格式失误;这是我第一次来这里)

表达式的结果是布尔值(通过 "not-equal-to" 二元运算符)。因此,如果模数的结果不为零,则完整表达式结果为 1(真)。如果模数的结果为零,则完整表达式结果为 0(假)

% 是整数余数运算符。 例如:

  • 21 % 7 == 0
  • 22 % 7 == 1
  • 25 % 7 == 4
  • 27 % 7 == 6
  • 28 % 7 == 0
如果整数除法产生非零余数,

x % y != 0 为真,否则为假。 x % y 就是余数; x % y != 0 测试余数是否非零。

(注意x % y != 0也可以写成(x % y) != 0。)

当你考虑负操作数时,它会稍微复杂一些。

看来你的问题是模运算符 (%)。所以这个运算符所做的是在我们除以两个数字后给你余数。

EX。 5 % 2 = 1 因为当我们在整数除法中取 5/2 时,我们得到 2,但是我们显然有 1 作为余数。另一个例子是 22 % 4 = 2 因为 22/4 = 5 有 2 个余数。

现在我们理解了这一点,我们可以清楚地看到,如果我们得到一个非零数,表达式 x % y != 0 将 return 为真,所以我们有两个互不相除的整数。如果我们认为这是错误的,那么我们会得到两个相互相除的数字。所以你实际上把它倒过来了,因为如果整数除法成功且没有余数 x % y == 0 那么 0 != 0 将为假。