【发布时间】:2012-08-18 20:15:29
【问题描述】:
可能重复:
How to code a modulo (%) operator in C/C++/Obj-C that handles negative numbers
据我了解(参见 Modulo operator with negative values 和 Modulo operation)C 和 C++ 有一个“余数”运算符 a % b,但当 LHS 为负数时,没有真正执行模运算的运算符。
几种语言确实有这样的功能。是否可以在 C/C++ 中构建一个高效的函数(或者在 i686/x64 CPU 上没有高效的方法)?
目前我使用(n * b + a) % b,其中n 被选中,这样我相当确定整个LHS 是非负数,但不可避免地会更改代码并且有时会出现错误。
注意:如果不清楚,我所说的模算术是指一个运算符,使得a + b % b = a % b 用于所有整数a 和所有正整数b。
【问题讨论】:
-
您在使用整数吗?否则我会推荐
std::fmod。 -
整数,是的。主要作为数组索引。
-
我真的迟到了(晚了 7 年),但这是不是:
(a % b + b) % b也许你在找什么?