
在较旧的C标准中没有指定带符号整数除法的舍入方向。但是,在C99中指定将其舍入为零。
这是可移植的代码,适用于所有版本的C标准和CPU架构:
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编译器可能会充分优化它,特别是如果将代码作为静态函数放在标头中。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)