我认为负数在进行取模运算时应该转换成正数……但是我无法在Objective-C中实现这一点。
我期望得到以下结果:
-1 % 3 = 2
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
但是注意这一点
-1 % 3 = -1
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
为什么会这样,有没有解决方法?
我认为负数在进行取模运算时应该转换成正数……但是我无法在Objective-C中实现这一点。
我期望得到以下结果:
-1 % 3 = 2
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
但是注意这一点
-1 % 3 = -1
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
为什么会这样,有没有解决方法?
使用:a-b*floor((float)a/(float)b)
a%b
你期望得到余数,但你使用的是模运算。在数学上它们是一样的,但在C语言中它们是不同的。 GNU-C有Rem()和Mod(),而objective-c只有mod(),所以您必须使用上面的代码来模拟rem函数(在数学世界中与mod相同,但在编程世界中不同[至少对于大多数语言])
另外请注意,您可以定义一个易于使用的宏来完成此操作。
#define rem(a,b) ((int)(a-b*floor((float)a/(float)b)))
然后您只需在代码中使用rem(-1,3)
即可正常工作。
a-b*floor((float)a/(float)b)
。 - Albert Renshaw