Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python2.7中轻松实现类C模(余数)运算_Python_C_Modulo - Fatal编程技术网

如何在Python2.7中轻松实现类C模(余数)运算

如何在Python2.7中轻松实现类C模(余数)运算,python,c,modulo,Python,C,Modulo,负数的模运算符%在python和C中以不同的方式实现。在C中: -4%3=-1,而在python中:-4%3=2 我知道如何在C中实现类似python的模。我想知道如何做相反的事情,即:在python中轻松实现类似C的模。如果是负数,只需将模添加到结果中即可: int mymod(int a, int b) { int res = a % b; if (res < 0) res += b; return res; } intmymod(inta,intb){

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


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

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

int mymod(int a, int b) {
   int res = a % b;
   if (res < 0)
      res += b;
   return res;
}
intmymod(inta,intb){
int res=a%b;
如果(res<0)
res+=b;
返回res;
}
编辑:反之亦然:

def mymod(a, b):
    res = a % b
    if (a < 0):
        res -= b
    return res
def mymod(a,b):
res=a%b
如果(a<0):
res-=b
返回res
在python中轻松实现类似C的模

由于C在整数被除时会向零截断,因此余数的符号始终是第一个操作数的符号。有几种方法可以实现这一点;选择一个你喜欢的:


def mod(a,b):返回abs(a)%abs(b)*(1,-1)[a根据C编译器的环境,您将得到不同的负模结果。使用括号
-(4%3)
这是老的div/mod-rem/quot辩论。TL;DR:不同的处理器实现这一点不同,因此不同的语言允许不同的语义。@BhargavRao使用括号
-(4%3)
如果原始
-4
3
值是变量而不是硬编码常量,则不适用。例如:
int k=i%j
,给定
int i=-4
int j=3
@BhargavRao运算符优先级是罪魁祸首。:-)不。这与运算符优先级无关。没有
intk=i%j;
给定的否定运算符
inti=-4;intj=3;
返回b;
?你的意思是
return res;
?我想sygi要求Python代码实现C中模运算符的行为。好的,现在用另一种方式添加,当a和b都小于0.python mymod()函数不正确。mymod(-10,10)返回-10,而不是它应该返回的0。来自@Armali的答案是正确的。