如何解决C语言中的Python风格整数除法和模数
在较旧的C标准中没有指定带符号整数除法的舍入方向。但是,在C99中指定将其舍入为零。
int py_div(int a, int b)
{
if (a < 0)
if (b < 0)
return -a / -b;
else
return -(-a / b) - (-a % b != 0 ? 1 : 0);
else if (b < 0)
return -(a / -b) - (a % -b != 0 ? 1 : 0);
else
return a / b;
}
int py_mod(int a, int b)
{
if (a < 0)
if (b < 0)
return -(-a % -b);
else
return -a % b - (-a % -b != 0 ? 1 : 0);
else if (b < 0)
return -(a % -b) + (-a % -b != 0 ? 1 : 0);
else
return a % b;
}
我做了一些表面测试,结果似乎和Python一样。该代码可能没有最大效率,但是一个好的C编译器可能会充分优化它,特别是如果将代码作为静态函数放在标头中。
解决方法
在Python和Ruby中,有符号整数除法会截断为负无穷大,而有符号整数模数的第二个操作数具有相同的符号:
>>> (-41) / 3
-14
>>> (-41) % 3
1
但是,在C和Java中,有符号整数除法将截断为0,并且有符号整数模数与第一个操作数具有相同的符号:
printf("%d\n",(-41) / 3); /* prints "-13" */
printf("%d\n",(-41) % 3); /* prints "-2" */
用C语言执行与Python和Ruby中相同的除法和模数的最简单,最有效的方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。