【Batch批处理】利用random生成任意区间的随机整数

随机数的使用还是很普遍的,尤其是和游戏相关的时候。如何利用Batch批处理来生成任意区间的随机整数,这一节我们一起来看看。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

简单介绍

和shell命令一样,默认情况下的批处理运算都只是支持到整数而已,并且都是向靠近0取整。例如

c:\Batch\test>set /a a=2/3
0
c:\Batch\test>set /a a=5/3
1
c:\Batch\test>set /a a=-5/3
-1

%random%这个环境变量会返回一个区间在[0,32768)的整数,注意右边是开集。例如

c:\Batch\test>echo %random%
19531
c:\Batch\test>echo %random%
8501
c:\Batch\test>echo %random%
10888

使用方法详解

常规使用

直接打印出%random%即可

生成0开始任意长度整数

假设想生成区间为[0,m)的整数,那么可以用%random%*m/32768来实现,例如想要生成[0,100)的随机整数,直到生成的数小于35为止

:: random number less than 35
@echo off
:rand
set /a rnd=%random%*100/32768
echo %rnd%
if %rnd% gtr 34 goto :rand
echo Finally!!
exit /b

执行上面这个脚本的结果如下,循环3次以后得到小于35的结果,退出循环

c:\Batch\test>random100.bat
71
92
32
Finally!!

需要注意的是生成负数的时候,如果m是负数,那么得到的区间为(m,0]。如果要实现右边开集需要用到下面的方法。

生成任意区间整数

在上面的基础上只需要进行一个偏移就能达到目地了。例如生成区间[m,n)的整数,可以用%random%*(n-m)/32768+m来实现,例如生成[-100,100)的整数,如果是负数就退出

::random less than 0
@echo off
:rand
set /a rnd=%random%*200/32768-100
echo %rnd%
if %rnd% geq 0 goto :rand
echo Finally!!
exit /b

执行上面这个脚本的结果如下,循环了6次以后终于生成了一个负数

c:\Batch\test>random_100.bat
18
32
28
30
30
-32
Finally!!

使用场景

通常随机数都和循环一起出现,满足特定条件再退出循环,这在游戏设计当中是个相当常见的操作。

总结

Batch批处理的随机数只能支持到整数,如果想要生成随机浮点数需要借助外部脚本的帮助了。同时在涉及到负数的时候要注意,直接乘以负数和由偏移生成的负数在区间的闭合上是不一样的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值