iOS - 随机数生成中的未知错误?

时间:2012-09-29 21:25:24

标签: ios arc4random

我正试图在屏幕上随机放置一些物体。

我使用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

这是一个错误还是我对发电机做错了?

1 个答案:

答案 0 :(得分:0)

根据documentation for arc4random(),返回类型为u_int32_t,这是一种无符号类型。在表达式

(arc4random()%700)-100

使用 unsigned 算法完成计算,包括减法。您正在获得无符号算术溢出。要解决此问题,请在进行减法之前强制转换为有符号整数类型:

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

结果将是-100到599之间的整数。