c语言伪随机数限制大小,C语言基础:伪随机数

news/2024/7/4 19:32:05

学过《计算机组成原理与接口技术》这门课的人可能会记得在编制ROM BIOS时钟中断服务程序时会用到Intel 8253定时/计数器,它与Intel 8259中断芯片的通信使得中断服务程序得以运转,主板每秒产生的18.2次中断正是处理器根据定时/记数器值控制中断芯片产生的。在我们计算机的主机板上都会有这样一个定时/记数器用来计算当前系统时间,每过一个时钟信号周期都会使记数器加一,而这个记数器的值存放在哪儿呢?没错,就在内存的0040:006CH处,其实这一段内存空间是这样定义的:

TIMER_LOW DW ;地址为 0040:006CH

TIMER_HIGH DW ;地址为 0040:006EH

TIMER_OFT DB ;地址为 0040:0070H

时钟中断服务程序中,每当TIMER_LOW转满时,此时,记数器也会转满,记数器的值归零,即TIMER_LOW处的16位二进制归零,而 TIMER_HIGH加一。rand01.c中的

movedata(0x0040,0x006c,FP_SEG(temp),FP_OFF(temp),4);

正是把TIMER_LOW和TIMER_HIGH两个16位二进制数放进temp数组,再送往RAND_SEED,从而获得了“随机种子”。

现在,可以确定的一点是,随机种子来自系统时钟,确切地说,是来自计算机主板上的定时/计数器在内存中的记数值。这样,我们总结一下前面的分析,并讨论一下这些结论在程序中的应用:

1.随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就不会变。

看下面这个C++程序:

//rand02.cpp

#include

#include

using namespace std;

int main()

{

unsigned int seed=5;

srand(seed);

unsigned int r=rand();

cout<

}

在相同的平台环境下,编译生成exe后,每次运行它,显示的随机数都是一样的。这是因为在相同的编译平台环境下,由随机种子生成随机数的计算方法都是一样的,再加上随机种子一样,所以产生的随机数就是一样的。

2.只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟(即定时/计数器的值)

看下面这个C++程序:

//rand03.cpp

#include

#include

using namespace std;

int main()

{

srand((unsigned)time(NULL));

unsigned int r=rand();

cout<

return 0;

}

这里用户和其他程序没有设定随机种子,则使用系统定时/计数器的值做为随机种子,所以,在相同的平台环境下,编译生成exe后,每次运行它,显示的随机数会是伪随机数,即每次运行显示的结果会有不同。

32/3<123>


http://www.niftyadmin.cn/n/3660211.html

相关文章

c 语言是面向对象程序设计,C 语言面向对象编程 - 封装

回复: 126C 语言面向对象编程 - 封装(46263843)出0入0汤圆电梯直达发表于 2019-11-29 08:53:31|只看该作者|倒序浏览|阅读模式本帖最后由 广轻电气091 于 2019-11-29 17:01 编辑大部分使用 C 语言进行开发的工程师&#xff0c;在接触更高级的编程语言之前&#xff0c;都认为 C …

Vista 是真正意义操作系统的回归吗?

Vista 是被微软寄予厚望的新一代桌面操作系统。它会给我们的生活工作带来什么&#xff1f;无数人带着这个问题来关注它的一举一动。微软却因为种种原因推迟Vista发布&#xff0c;在吊足了大家的胃口的同时也让许多用户感到失望。相信许多耐不住性子的人已经参加了微软的CPP计划…

c语言编译undeclared,C语言中,为什么这样的代码编译时出错a undeclared(first use in this function),...

局部变量的作用域在花括号里面。全局变量的作用域&#xff0c;在程序整个运行期间。建议将变量a的定义放到do while 外面。例如&#xff1a;#include#include void onetype(char ddd,char t);int main(){std::ifstream one("two.txt");std::cout<char two,three,f…

【MVP】罗江华

目前就职于某全球十大电子商务公司之一,.Net产品开发组成员, 微软MVP, 成都.Net俱乐部会长, 常撰写和翻译一些技术文章和组织一些俱乐部的交流活动。2006年毕业于西华大学软件学院&#xff0c;擅长C#、Remoting,Web Service,MSMQ等技术&#xff0c;常用SQL Server及.NET进行软件…

led version 2.0 摇摇棒编程软件c 语言,基于单片机控制LED摇摇棒的解决方案 - 全文...

摇摇棒本为开发套件&#xff0c;全部采用直插的器件。显示的LED采用了5mm超高亮30度聚光发光二极管&#xff0c;共 32只。控制芯片采用宏晶单片机STC11F03E&#xff0c;其内部有3K的程序存储空间&#xff0c;256字节的数据存储空间&#xff0c;另外其内部还有2K的EEPROM空间。设…

[CSDN 视频--新闻分析第一期]:vista操作系统 电子商务 浏览器之争

视频链接&#xff1a; http://live.csdn.net/Issue18/livePlay.aspx [CSDN视频--新闻分析]本期话题&#xff1a;Vista 是真正意义操作系统的回归吗&#xff1f;http://blog.csdn.net/EricLee00/archive/2006/07/10/900312.aspx微软应该是技术圈里&#xff0c;被关注的一个焦点。…

c语言程序设计实验报告 实验2 数据类型,C语言程序设计实验报告——实验2数据类型、运算符和表达式...

《C语言程序设计实验报告——实验2数据类型、运算符和表达式》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《C语言程序设计实验报告——实验2数据类型、运算符和表达式(6页珍藏版)》请在人人文库网上搜索。1、装订线装订线凯里学院 C语言程序设计 实验报告专业 年级…

CSDN 未来网站内容Tag架构猜想

大概是上周吧&#xff0c;写了一篇blog主观的分析了一下CSDN目前的内容架构&#xff0c;收到许多朋友好的意见和建议&#xff0c;在此首先对他们表示感谢。网络变化真的很快&#xff0c;现在的网站内容架构较2&#xff0c;3年前已经有翻天覆地的变化。很多人也提出了“如今的网…