如何随机产生长整型

这篇内容讨论了ISO C标准中的随机数函数,通常返回int类型,但不支持长整型。文中建议通过组合两个int类型随机数来创建长整型,并提供了关于如何设置种子和确保多线程环境中随机数的可重复性的信息。对于需要长整型随机数的场景,文章提出了使用位操作拼接两个int值的方案。

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

GCC中一些函数可以帮忙产生整型,不过都是int.

19.8.1 ISO C Random Number Functions

This section describes the random number functions that are part of the ISO C standard.

To use these facilities, you should include the header file stdlib.h in your program.

— Macro: int  RAND_MAX

The value of this macro is an integer constant representing the largest value the rand function can return. In the GNU library, it is 2147483647, which is the largest signed integer representable in 32 bits. In other libraries, it may be as low as 32767.

— Function: int  rand ( void)

The rand function returns the next pseudo-random number in the series. The value ranges from 0 to RAND_MAX.

— Function: void  srand ( unsigned int seed)

This function establishes seed as the seed for a new series of pseudo-random numbers. If you call rand before a seed has been established with srand, it uses the value 1 as a default seed.

To produce a different pseudo-random series each time your program is run, do srand (time (0)).

POSIX.1 extended the C standard functions to support reproducible random numbers in multi-threaded programs. However, the extension is badly designed and unsuitable for serious work.

— Function: int  rand_r ( unsigned int *seed)

This function returns a random number in the range 0 to RAND_MAX just as rand does. However, all its state is stored in the seed argument. This means the RNG's state can only have as many bits as the type unsigned int has. This is far too few to provide a good RNG.

If your program requires a reentrant RNG, we recommend you use the reentrant GNU extensions to the SVID random number generator. The POSIX.1 interface should only be used when the GNU extensions are not available.



另参见

http://meizhe143.blog.163.com/blog/static/38938362007102995121360/


但是如何产生长整型呢?

是否可以分别两次产生int型随机数,再将这两个数利用位操作,将一个数看成高位,另一个数看成低位,拼一个长整型出来。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值