负数如何求模,正数对负数取模定律,负数的取模

  负数如何求模,正数对负数取模定律,负数的取模

  学Python看这部分数值运算和模运算。原来不仅正数和负数可以取模,浮点数甚至复数都可以取模:

  对于x%y,

  如果都是整数,则返回x/y的余数;

  如果是浮点数,则返回x-int(x/y)* y;

  如果是复数,x-int((x/y))。实数)*y返回。

  然而,这些公式似乎只有当操作数都是正数时才满足。

  对于负数参与模运算,不同的语言有不同的规定:

  C/Java语言中的除法采用零截断。一个规则是模运算结果的符号与第一个操作数的符号相同(或为0)。

  C截断的方式取决于具体的机器。

  Python语言划分采用负无限截断,即地板划分。是的,模运算结果的符号与第二个操作数的符号相同。

  综上所述,可以总结如下:

  在C和Java中,模运算只能是整数。先不管正负计算结果,然后加上符号,使结果与第一个操作数符号相同。

  在Python中,模运算也可以是浮点数和复数;

  对于两个操作数符号相同的情况,直接取余数或根据公式计算;

  对于两个符号不同的操作数的情况,可以先取余数或者根据公式计算结果。如果结果为0,则不需要继续操作。如果不是0,还必须取第二个操作数的补数。(比如5%-4,先把结果算成1,而不是0,那么1对4的补数就是3,结果就是——。还有最后一步,保证结果的符号和第二个操作数的符号相同!所以,5%-4的结果是-3。)

  你可以这样理解Python的模运算:首先规定结果与第二个操作数符号相同,后面是x% y,如果y是正数,假设y=4,则表示数轴对应关系为:

  .3 0 1 2 3 0 1 2 30 1 .

  .-5 -4 -3 -2 -1 0 1 2 3 4 5 .

  如果y为负,假设y=-4,则表示数轴对应关系为:

  .1 0 3 2 1 0 3 2 1 0 3 .

  .-5 -4 -3 -2 -1 0 1 2 3 4 5 .

  那么,C语言中的模运算可以这样理解:首先规定结果与第一个操作数符号相同;其次,无论正负,以5%4或5%-4为例,数轴对应为:

  .1 0 3 2 1 0 1 2 3 0 1 .

  .-5 -4 -3 -2 -1 0 1 2 3 4 5 .

  O()o,事情变得有点复杂了。最后贴一张Python下的操作截图:

  所以在实现不确定的情况下,保险的做法是先把操作数转换成正数,再根据需要进行调整。

  这篇文章来自一个晚上很震撼的博客。转载请保留出处。

  由Disqus支持的博客评论

负数如何求模,正数对负数取模定律,负数的取模