为什么arc4random会返回异乎寻常的价值?

Jus*_*and 3 objective-c

我在我的iOS应用程序中的函数中调用arc4random来生成从-5到6的随机值.

double num;
for (int i = 0; i < 3; i++) {
    num = (arc4random() % 11) - 5;
    NSLog(@"%0.0f", num);
}
Run Code Online (Sandbox Code Playgroud)

我从控制台获得以下输出.

2012-05-01 20:25:41.120 Project32[8331:fb03] 0
2012-05-01 20:25:41.121 Project32[8331:fb03] 1
2012-05-01 20:25:41.122 Project32[8331:fb03] 4294967295
Run Code Online (Sandbox Code Playgroud)

0和1是范围内的值,但是wowww,4294967295来自哪里?

改变arc4random()rand()解决问题,但rand()当然需要播种.

Jos*_*ell 7

arc4random()返回一个u_int32_t- 这是一个无符号整数,一个不代表负值的整数.每次arc4random() % 11出现数字0≤n<5时,你减去5并包围一个非常大的数字.

double当然,s 可以代表负数,但是你不会转换到double为时已晚.在那里贴一个演员:

 num = (double)(arc4random() % 11) - 5;
Run Code Online (Sandbox Code Playgroud)

在减法之前推广模数的结果,一切都会好的.