1

私は次の入力を持っています(NSLogによって確認されました)xleft = 128, xRight = 192:。コードの次の行はこれらを使用しています-

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

前回の実行では、xPos =53です。私の計算では、生成された乱数がゼロの場合、128以上である必要があります(192 - 128 = 64, rand(64) = 0, 0 + 128 = 128。xLeftからxRightの範囲の乱数を生成しようとしています。

4

2 に答える 2

2

試す:

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

基本的には、最初にxrightからxleftを減算して結果をモッディングするのではなく、xRIghtでモッディングしてからxleftを減算します。

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

于 2012-01-13T22:19:21.400 に答える
2

%は、+や-よりもCおよびObjective-Cなどの直接派生言語で優先順位が高くなります。*と/に等しい。

そのため、式は次のように評価されます。

  1. arc4randomを取得する
  2. そのモジュラスとxRightを取得します
  3. xLeftを引く
  4. xLeftを追加

したがって、[0、xRight)の範囲内のものを期待する必要があります

于 2012-01-13T22:21:35.147 に答える