0

画面内のランダムな位置にいくつかのオブジェクトを配置しようとしています。

arc4random()を使用して新しい乱数を生成します。

しかし、関数が正しく機能していないようです。コードとトレース結果は次のとおりです。

Code :

UIView *stateView = [[UIView alloc] initWithFrame:CGRectMake( (arc4random()%700)-100 , (20 * 91) + 378 + ((arc4random()%600)+200), 325 , 188)];

NSLog(@"Note %d : X = %f , Y = %f",i,stateView.frame.origin.x,stateView.frame.origin.y);


**********************


NSLog Output :

Note 5 : X = 4294967040.000000 , Y = 2552.000000

これはバグですか、それともジェネレーターで間違っていますか?

4

1 に答える 1

0

のドキュメントにarc4random()よると、戻り型はu_int32_t、符号なし型であるです。式で

(arc4random()%700)-100

減算を含む計算は、符号なし算術を使用して行われます。符号なし算術オーバーフローが発生しています。これを修正するには、減算を行う前に符号付き整数型にキャストします。

((int) (arc4random() % 700)) - 100

この結果は、-100から599までの整数になります。

于 2012-09-29T21:32:18.613 に答える