I can understand 3%2 gives 1.
As 2*1+1 so 1 is remainder.
Why -3%2 gives -1, 3%-2 gives 1 and -3%-2 gives -1. Lot of confusion.
请有人解释/澄清。试图找出重复的但却找不到类似的东西。
不确定这是一个非常愚蠢的问题;-)
答案 0 :(得分:5)
C中的%
运算符不是模运算符,而是余数运算符。
模数和余数运算符在负值方面有所不同。
使用余数运算符,结果的符号与被除数的符号相同,而对于模运算符,结果的符号与除数相同。
C将%b的%操作定义为:
a == (a / b * b) + a % b
带/截断朝0的整数除法。这是朝向0(而不是负向无效)的截断,它将%定义为余数运算符而不是模运算符。
答案 1 :(得分:2)
作为一般规则,模和除法应满足等式
b * (a/b) + a%b == a
对于正数,很明显这意味着a%b
必须是正数。但如果a/b
为负数,则结果将舍入为零。
所以请以a = -3, b = 2
为例。我们知道a/b = -1.50
向零舍入为a/b == -1
。从上面的等式,我们得到b * (-1) + a%b == a
。如果我们插入a和b,我们会得到-2 + a%b == -3
,并且我们看到%b必须是-1
。
同样可以用于其他情况。