【问题标题】:How to easily implement C-like modulo (remainder) operation in python 2.7如何在 python 2.7 中轻松实现类 C 的模(余数)运算
【发布时间】:2015-12-15 14:28:43
【问题描述】:

负数上的模运算符%在python和C中以不同的方式实现。在C中: -4 % 3 = -1,而在 python 中:-4 % 3 = 2

我知道如何在 C 中实现类 python 的模。我想知道如何做相反的事情,即:在 python 中轻松实现类 C 的模。

【问题讨论】:

  • 根据 C 编译器、环境的不同,负模会得到不同的结果。
  • 使用括号- (4 % 3)
  • 这是旧的 div/mod rem/quot 辩论。 TL;DR:不同的处理器以不同的方式实现这一点,因此不同的语言允许不同的语义。
  • @BhargavRao 使用方括号 - (4 % 3) 如果原始 -43 值是变量而不是硬编码的常量,则不适用。例如:int k = i % j,给定int i = -4int j = 3
  • @BhargavRao 操作员优先级是罪魁祸首。 :-) 不。这与运算符优先级无关。给定int i = -4; int j = 3;int k = i % j; 中没有否定运算符

标签: python c modulo


【解决方案1】:

在 python 中轻松实现类似 C 的模数。

由于 C 在整数被除时会向零截断,因此余数的符号始终是第一个操作数的符号。有几种方法可以实现它;选一个你喜欢的: def mod(a, b): return abs(a)%abs(b)*(1,-1)[a<0] def mod(a, b): return abs(a)%abs(b)*(1-2*(a<0))

【讨论】:

    【解决方案2】:

    如果它是负数,只需将模块添加到结果中:

    int mymod(int a, int b) {
       int res = a % b;
       if (res < 0)
          res += b;
       return res;
    }
    

    编辑:反之亦然:

    def mymod(a, b):
        res = a % b
        if (a < 0):
            res -= b
        return res
    

    【讨论】:

    • return b;?你的意思是return res;
    • 我认为 sygi 要求 Python 代码来实现 C 中模运算符的行为。
    • 好的,现在也添加了另一种方式
    • 当 a 和 b 都
    • python mymod() 函数不正确。 mymod(-10,10) 返回 -10,而不是应有的 0。 @Armali 的回答是正确的。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2021-11-14
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多