当前位置:婀娜女性网>美好生活>心理>

c语言取模取余运算规则

心理 阅读(1.24W)
c语言取模取余运算规则

取模算法:

取模运算也叫取余运算,在C中用%来表示, 数学中叫mod。

x mod y = x%y

x%y = x - y[x/y], for y!=0.

数学中的余数概念和我们的计算机中的余数概念一致,但实现却不一致。

其中 [x/y] 代表的是 x/y 的最小下界。

例:

-3 mod 2 = -3 - 2*[-3/2]

= -3 - 2*[-1.5]

= -3 - 2*(-2)

= -3 + 4

= 1

而我们的计算机是怎么做的呢:

-3%2 = -3 - 2*(-3/2)

= -3 - 2*(-1)

= -3 - (-2)

= -1

所以计算机中的取余实际上是:

x%y = x - y(x/y), for y!=0.

这就是二者的区别。这个区别,对于正数,二者计算出的结果是相等的,但是负数就不相等了。这就意味着,如果以后在使用数学中余数相关定理的时候, 要注意计算机中余数的计算和数学定义不是完全一致的,所以在计算机上,对于负数,数学定理并不完全适用。当然,对于正数,二者是没有区别的。至于为什么计算机上要这么实现,我想恐怕还是历史原因,最早的计算机如果这样计算除法(取余是靠除法来完成的),那么就涉及到浮点数的计算以及取下界,这样,将比较大的降低效率,所以实现成了这样的方式,一直沿用至今。

取余(取模)的奥义

“/”在我们这些程序中代表整除,它符合除法法则,异号抵消。

再看看我们余数的定义:

整除“余”下的“数”。

则有:余数=被除数-商除数

商就是我们整除的结果。

看例子:

eg1:

(-6%5) = -6 - (-6/5)5

(-6%5) = -6 - (-1)5

(-6%5) = -6 - (-5)

(-6%5) = -6+5

(-6%5) = -1

eg2:

(5%-6) = 5 - (5/-6)(-6)

(5%-6) = 5 - (0)(-6)

(5%-6) = 5 - 0

(5%-6) = 5

eg3:

(-5%-6)= -5 - (-5/-6)(-6)

(-5%-6)= -5 - (0)(-6)

(-5%-6)= -5 - 0

(-5%-6)= -5

eg4:

(6%-5) = 6 - (6/-5)(-5)

(6%-5) = 6 - (-1)*(-5)

(6%-5) = 6 - 5

(6%-5) = 1

综上所述可以得出结论:被除数如果是负数