我在我的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()当然需要播种.
arc4random()返回一个u_int32_t- 这是一个无符号整数,一个不代表负值的整数.每次arc4random() % 11出现数字0≤n<5时,你减去5并包围一个非常大的数字.
double当然,s 可以代表负数,但是你不会转换到double为时已晚.在那里贴一个演员:
num = (double)(arc4random() % 11) - 5;
Run Code Online (Sandbox Code Playgroud)
在减法之前推广模数的结果,一切都会好的.
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |