余数运算符如何在c中工作

时间:2016-06-30 05:49:02

标签: c

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. 

请有人解释/澄清。试图找出重复的但却找不到类似的东西。

不确定这是一个非常愚蠢的问题;-)

2 个答案:

答案 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

同样可以用于其他情况。