随机数

这篇博客介绍了如何在Win32环境下使用C/C++编程中的rand()函数配合srand()设置种子来生成随机数,并展示了用汇编语言实现随机数生成的代码。通过RDTSC指令获取CPU周期数确保每次生成的随机数不同,然后通过函数getRandom()进行处理,用于在特定范围内生成随机数。文章最后给出了一个简单的随机数统计应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在WIn32 c/c++编程中使用rand()函数(用srand()设置种子)就可以获得一个随机数

   然后将得到的随机数处理就可以得到某一范围内的随机数

 

用汇编来实现也很简单

  随机数关键要获得一个每一次都不同的数

     RDTSC这个指令可以获得计算机启动以来CPU运行的周期数,

     其结果保存在EDX:EAX中,EDX是高位,EAX是低位

 

以下为getRandom()函数的源码

====getrandom.asm====

segment .text
    global getRandom
getRandom:
    push ebp
    mov  ebp,esp
    rdtsc
    shr  eax,2
    mov  ebx,[ebp+12]
    add  ebx,1
    sub  ebx,[ebp+8]
    cdq
    idiv ebx
    add  edx,[ebp+8]
    mov  eax,edx
    mov  esp,ebp
    pop  ebp
    ret

 

=======main.c========

#include<stdio.h>
int getRandom(int a,int b);
int main()
{
 int i;
 int t;
 float s[16]={0};
 float p;
 for(i=0;i<500000;i++)
 {
  t=getRandom(20,35);
  //printf("%d ",t);
  s[t-20]++;
 }
 printf("/nresult:/n");
 for(i=0;i<16;i++)
 {
  p=s[i]/500000;
  printf("%d has %d ,Percent is %f/n",i+20,(int)s[i],p);
 }
 return 0;
}

 

========build.bat=====

nasm -f win32 getrandom.asm --prefix _
cl -c main.c
link main.obj getrandom.obj
if exist getrandom.obj del getrandom.obj
if exist main.obj del main.obj

=====================

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值