oc的随机数

objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )

1、随机数的使用

     1)、arc4random() 比较精确不需要生成随即种子

使用方法 :

通过arc4random() 获取0到x-1之间的整数的代码如下:

int value = arc4random() % x;

获取1到x之间的整数的代码如下:

int value = (arc4random() % x) + 1;

2)、CCRANDOM_0_1() cocos2d中使用 ,范围是[0,1]

使用方法:

float random = CCRANDOM_0_1() * 5; //[0,5]   CCRANDOM_0_1() 取值范围是[0,1]

3)、random() 需要初始化时设置种子

使用方法:

srandom((unsigned int)time(time_t *)NULL); //初始化时,设置下种子就好了。

rand()实际并不是一个真正的伪随机数发生器,random()会相对好点,但也不算理想。幸运的是iPhone上还有其他的选择。个人来说我首选arc4random() ,原因就是它是一个真正的伪随机算法,而且范围是rand()的两倍。

-(float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2{    int startVal = num1*10000;    int endVal = num2*10000; 

    int randomValue = startVal +(arc4random()%(endVal - startVal));    float a = randomValue;

    return(a /10000.0);}

在一些产品的源代码中,经常会发现有这样的语句,

srand(unsigned(time(NULL)));

为什么要这样做呢,其实很简单。

1.  time()函数表示返回1970-1-1 00:00:00 到当前时间的秒数,而time(NULL)表示获取一个时间,准确的说,获取一个指针的地址。

2.  srand()函数是产生随机数种子的。在产生随机数 rand()被调用的时候,他会查看:如果用户之前调用过 srand(seed)的话,他会重新调用一遍 srand(seed)以产生随机数种子;如果发现没有调用过 srand(seed)的话,会自动调用 srand(1)一次。所以,如果希望rand()每次调用产生的值都不一样,就需要每次调用srand(seed)一次,而且seed不能相同。

综合上述两点,那就很明了了。

srand(unsigned(time(NULL)))表示产生随机数种子以保证rand()调用的时候不会出现重复的随机值。

时间: 2024-08-07 13:16:17

oc的随机数的相关文章

oc 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()

1).arc4random() 比较精确不需要生成随即种子 使用方法 : 通过arc4random() 获取0到x-1之间的整数的代码如下: int value = arc4random() % x; 获取1到x之间的整数的代码如下: int value = (arc4random() % x) + 1; 2).CCRANDOM_0_1() cocos2d中使用 ,范围是[0,1] 使用方法: float random = CCRANDOM_0_1() * 5; //[0,5]   CCRAND

OC语言基础

.h(头文件) .m(源文件c.oc) .mm(源文件c.oc.c++) gcc -c      -o    汇编 -framework Foundation链接  NS开头 字符串对象加@ oc中完全兼容c的函数库 NSLog可以自动换行,并且提供文件名编译时间等 需要包含头文件,每一个框架都有一个主头文件,其名字和主头文件相同,主头文件包含了这个框架的所有头文件. #import可以自动防止头文件重复包含. 链接时,需要手动连接框架. 10.多文件编译:所有对象都是以指针形式存在:跟c类似.

oc集合

本人之前学习过一年半ios开发 由于行情太过凄惨,故转前端.心在前端,苹果亦难忘!把我平时的笔记作出给大家总结! 回顾之前的知识 便利初始化函数:框架类库中的一些类有一系列的以init开头的方法,这些方法就是便利初始化函数.例如:NSString的initWithFormat,initWithString等.这些方法都遵循了一个命名规范,就是以init开头. 使用便利初始化函数创建对象首先还是要调用alloc 方法给对象分配内存空间,然后再初始化对象.代码还是比较繁琐的,有没有比较简单创建并初始

【IOS开发学习—OC篇】

一.instancetype和id关键字的区别 1)instancetype表示方法的返回类型和调用方法的对象类型相同. 2)在Object-C引入instancetype之前,初始化方法的返回类型都是id,id的定义是[指向任意对象的指针(相当于C语言中的void*)] 它们的区别是:instancetype只能用来表示方法返回类型,但是id还可以用来表示变量和方法参数的类型. 二.在头文件中的方法声明顺序 1)这算是一个约定,按照先后顺序是:实例变量.类方法(静态方法).初始化方法.其他方法

oc 语法 kvo

点名主题 : kvo就是一个类来监听另外一个类的变量,当变量发生改变的时候来通知这个类. 举个例子: 创建一个人的类,人的类中有一个银行卡:创建一个银行卡的类,银行卡的类中有一个钱的变量: 我们来用人的类来监听银行卡中的钱数,当银行卡中的钱数发生改变的时候来通知人: 下面我们来实现这个例子: 新建一个 创建一个person类 person.h #import <Foundation/Foundation.h> @class BankCard; @interface Person : NSObj

iOS开发基础----OC/UI控件

1. 前缀-> 只是代码组合之后,用来区分谁写的代码 2. 工具包frameworks 总共4个工具包,前3个是经常用的,最后一个是测试用的. 3. iphone 6 的SDK 是建立在 ios 8.0以上的 4.ios的界面虽然发生了改变,但还是从main.m中执行的,只是main.m没有放在导航区,而是放在Supporting Files 分组中.注意不是文件夹,是分组. main.m里有这个 return UIApplicationMain(argc, argv, nil, NSStrin

iOS开发——网络编程OC篇&amp;Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

shell系列生成随机数的方法

一: RANDOM echo $RANDOM RANDOM的随机数是有范围的1--32767,一般用它是可以被破解的 1.2  生成八位数的随机密码: echo $(($RANDOM+11111111)) 二:MD5sum 随机加密方法 生成的密码较长 取9位数密码: echo $RADDOM |md5sum|cut -c 2-9 三:通过openssl产生随机数 [[email protected] tmp]# openssl rand -base64 8 hInfIvtfOSk= [[ema

嵌入式&amp;iOS:回调函数(C)与block(OC)传 参/函数 对比

C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(int data_i32)); callBack.c 1).在doSomeThingCount函数,对运行次数自增,并调用参数--函数. void DSTCount(void(*CallBack)(int data_i32)) { static int numb = 0; numb++; (*Call