iOS 生成随机数

Objective-c中并没有提供生成随机数的函数,所以使用C中提供的rand()、srand()、random()、arc4random()几个函数。

1. 使用 arc4random 生成随机数

  • 1.1 随机整数:范围在 [0,100),包括0,不包括100
int x = arc4random() % 100;
  • 1.2 随机整数:范围在 [from,to],包括from,包括to
int x = arc4random() % (to - from + 1) + from;
  • 1.3 抽取方法:随机整数,范围在[from, to]
-(int)getRandomNumber:(int)from to:(int)to
{
  return (int)(from + (arc4random() % (to – from + 1)));
}

2. 使用 rand() 生成随机数

  • 2.1 随机整数:范围在 [from,to],包括from,包括to
int x = rand() % (to - from + 1) + from;
  • 2.2 注意

  • 2.1 在标准的C库中 rand() 函数可以生成 0~RAND_MAX 之间的一个随机数,其中 RAND_MAXstdlib.h 中定义的一个整数,它与系统有关。

  • 2.2 因为 rand() 函数是按指定的顺序来产生整数,因此每次执行下面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫 伪随机数

printf("Random numbers are: %i %i\n",rand(),rand());
  • 2.3 为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过函数 srand() (来自stdlib.h) 为随机数生成器播散种子。只要种子不同 rand() 函数就会产生不同的随机数序列。
srand((unsigned)time(0)); 

3. 比较

  1. rand()random() 实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。

  2. arc4random() 是一个真正的伪随机算法,不需要生成随机种子,因为第一次调用的时候就会自动生成。而且范围是 rand() 的两倍。在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296)。

  3. 精确度比较:arc4random() > random() > rand()

  4. 使用比较:

// 1. rand(),初始化随机种子,不加这句每次产生的随机数不变
srand((unsigned)time(0));
int i = rand() % 100;

// 2. random()
srandom(time(0));
int i = random() % 100;

// 3. arc4random()
int i = arc4random() % 100 ;

4. 生成随机小数,生成随机整数再除

4.1. 随机小数:[0,1)

float f = (float)(arc4random()%100) / 100 ;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C中提供了rand()、srand()、random()、arc4random()几个函数来获取随机数。 使用 ...
    Mark_Ming阅读 6,146评论 2 11
  • Objective-C语言中生成随机数的函数 arc4random()函数arc4random()函数用来生成随机...
    韩发发吖阅读 4,578评论 0 1
  • 最近一直使用随机数,为了以后方便查阅,总结一下:在C中提供了rand()、srand()、random()、arc...
    iOS_成才录阅读 91,886评论 8 42
  • 获取一个随机整数,范围在[from,to],包括from,包括to
    Bager阅读 1,313评论 0 0
  • 在我们开发的过程中,为了方便会 定义很多宏定义,像systemColor,systemUrl 之类的,如果是在OC...
    李美东阅读 3,106评论 0 0