網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
rand()函數(shù)
生成隨機(jī)數(shù)使用rand()函數(shù)
函數(shù)原型:
int rand (void); 頭文件<stdlib.h>
初步使用
?目前該“隨機(jī)數(shù)”貌似成功生成
生成0到99的隨機(jī)數(shù)
再次運(yùn)行
?發(fā)現(xiàn)問(wèn)題
大家有木有發(fā)現(xiàn)其實(shí)這三次的運(yùn)行結(jié)果生成的隨機(jī)數(shù)其實(shí)是一樣的,沒(méi)錯(cuò),我說(shuō)的就是三次,
第一次是41 18467 6334 26500 19169 15724 11478 29358 26962 24464,將這些數(shù)對(duì)100求余
不就是?41 67 34 0 69 24 78 58 62 64了嗎?
這些看似偶然的結(jié)果并不是精巧設(shè)計(jì)的,而是rand()函數(shù)需要一顆種子才能正確的生成我們所需要的隨機(jī)數(shù),沒(méi)有該種子那么使用rand()永遠(yuǎn)都是一樣的結(jié)果
查看rand()函數(shù)的官方文檔
?RAND_MAX的值是0x7fff,十進(jìn)制即?32767?,可見(jiàn)rand()函數(shù)只會(huì)產(chǎn)生0到32767之間的偽隨機(jī)整數(shù)
這個(gè)數(shù)字是由一個(gè)算法生成的,該算法在每次調(diào)用時(shí)返回一系列明顯無(wú)關(guān)的數(shù)字。該算法使用種子來(lái)生成序列,通過(guò)函數(shù)srand將序列初始化為特定的值。
官方指明了使用srand函數(shù)來(lái)生成一個(gè)種子
srand()函數(shù)
srand的官方介紹
發(fā)現(xiàn)srand函數(shù)原型是void srand(unsigned int seed)
,其中seed即種子的意思,所謂的種子無(wú)非就是一個(gè)無(wú)符號(hào)整型。
頭文件<stdlib.h>
初步使用srand()
?
?這次生成的隨機(jī)數(shù)與前面的確實(shí)不一樣
再次運(yùn)行
?
發(fā)現(xiàn)結(jié)果并沒(méi)有改變,這是咋回事呢?
發(fā)現(xiàn)問(wèn)題
其實(shí)沒(méi)有使用srand之前,rand函數(shù)本身就有默認(rèn)的種子,而srand只是將其默認(rèn)的種子改成了100而已,下次運(yùn)行該代碼種子還是100,只要種子不變,那么生成的隨機(jī)數(shù)永遠(yuǎn)都是與該種子對(duì)應(yīng)的,因此你要想每次運(yùn)行都可以得到不同的隨機(jī)數(shù),那就只能保證每次運(yùn)行的種子不一樣,這樣問(wèn)題就來(lái)了,種子也是要隨機(jī)的,這不就套娃了嗎?還好每次運(yùn)行的時(shí)間是不一樣的,因此只需要將生成的種子與時(shí)間掛鉤就能保證每次運(yùn)行的種子不一樣,因?yàn)闀r(shí)間包含了年月日時(shí)分秒,就保證了每一刻的時(shí)間是絕對(duì)不會(huì)相同的
解決問(wèn)題:time函數(shù)
?頭文件<time.h>
文檔中的核心內(nèi)容就是給time傳個(gè)空指針NULL進(jìn)去,它就將當(dāng)前的時(shí)間以time_t類型進(jìn)行返回,其中time_t其實(shí)就是int,只不過(guò)被用typedef進(jìn)行了類型重命名了而已,
小伙伴是否會(huì)有疑問(wèn)一個(gè)時(shí)間怎么以整型進(jìn)行表示呢?這里就涉及到了時(shí)間戳的概念
時(shí)間戳
時(shí)間戳: 當(dāng)前時(shí)間與計(jì)算機(jī)起始時(shí)間的差值,單位是秒。
計(jì)算機(jī)的起始時(shí)間:1970-01-01 08:00:00(北京時(shí)間)
?
?
原文鏈接:https://blog.csdn.net/qq_42591783/article/details/121376788
相關(guān)推薦
- 2022-12-08 Apache?Cordova?Android原理應(yīng)用實(shí)例詳解_Android
- 2022-10-27 Python數(shù)值求解微分方程方法(歐拉法,隱式歐拉)_python
- 2022-05-28 C++?超詳細(xì)講解stack與queue的使用_C 語(yǔ)言
- 2023-06-18 詳解Qt中QStackedWidget控件的使用_C 語(yǔ)言
- 2023-03-13 GO語(yǔ)言操作Elasticsearch示例分享_Golang
- 2022-06-22 Git中tag標(biāo)簽的使用教程_其它綜合
- 2022-09-21 Django?url.py?path?name同一app下路由別名定義_python
- 2022-04-16 Python3如何將源目錄中的圖片用MD5命名并可以設(shè)定目標(biāo)目錄_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支