Xcode arc4random()表现不如预期

时间:2012-01-13 22:13:49

标签: xcode arc4random

我有以下输入(由NSLog验证):xleft = 128, xRight = 192。下一行代码使用了这些 -

xPos = (arc4random() % xRight-xleft) + xleft;

在最后一次运行中,xPos = 53.根据我的计算,如果产生的随机数为零(192 - 128 = 64, rand(64) = 0, 0 + 128 = 128,则应该不小于128。我试图生成xLeft到xRight范围内的随机数。

2 个答案:

答案 0 :(得分:2)

尝试:

xPos = (arc4random() % (xRight-xleft)) + xleft; 

基本上你是用xRIght进行修改然后减去xleft,而不是先从xright中减去xleft并用结果修改。

参考链接:http://www.techotopia.com/index.php/Objective-C_2.0_Operator_Precedence

答案 1 :(得分:2)

%在C中具有更高的优先级,而直接派生的语言如Objective-C比+和 - 更高。它等于*和/.

因此表达式被评估为:

  1. 获取arc4random
  2. 获取模数和xRight
  3. 减去xLeft
  4. 添加xLeft
  5. 所以你应该期待[0,xRight]

    范围内的任何事情