为什么-1%2 = -1?

时间:2011-10-22 05:22:06

标签: xcode

2 个答案:

答案 0 :(得分:3)

本文取自this post.

Objective-C是C99的超集,当a % b为负时,C99将a定义为否定。另请参阅Wikipedia entry on the Modulo operation和此StackOverflow question.

(a >= 0) ? (a % b) : ((a % b) + b)这样的东西(尚未经过测试,可能有不必要的括号)应该可以得到你想要的结果。

答案 1 :(得分:2)

通常,模运算符使用以下公式计算:

number % modulus := number - (number / modulus) * modulus

在您的情况下,您获得(-1) - (-1/2)*2 = (-1) - (0) = -1。请注意,由于我们使用的是积分数学,因此-1/2的计算结果为0。

如果所有计算机都以这种方式运行,或者根据硬件的不同而有所不同,那就超出了我的要求,但我记得几年前这个计算机就出现了。