2012-01-13 3 views
1

私は以下の入力を持っています(NSLogで検証済み):xleft = 128, xRight = 192。生産乱数がゼロ(192 - 128 = 64, rand(64) = 0, 0 + 128 = 128であれば、コードの次の行は、私の計算では、最後に実行にthese-Xcode arc4random()が期待通りに動作しない

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

、XPOS = 53を使用して、それが128以上であるべきです。私はxLeftからxRightの範囲の乱数を生成しようとしています。

答えて

2

試してみてください。

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

は基本的にあなたがxRIghtで改造して、xleftを差し引く、代わりに最初の結果でxrightや改造からxleft引いています。

参考リンク: - http://www.techotopia.com/index.php/Objective-C_2.0_Operator_Precedence

+0

ありがとう、私が欠けていたモジュラスの優先順位だった、歓声。 – Skybird

2

%は、Cでの優先順位が高いと+よりもObjective-Cの等を直接派生言語を持っています。これは*や/と同じです。

だから、その式は次のように評価されます。

  1. 取得arc4random
  2. こととxRight
  3. 減算xLeft
  4. の弾性率はあなたが何を期待すべきxLeft

を追加取得範囲[0、xRight]

+0

多くのおかげで、それは私が行方不明だったモジュラスの優先順位だった、歓声。 – Skybird

関連する問題