c库函数rand()通常返回15个随机位,使用此函数实现bigrand()返回至少30个随机位。 —— 节选自《编程珠玑》12.1
答案如下
int bigrand()
{
return RAND_MAX * rand() + rand();
}
+ rand()
是让后15位随机,但为什么RAND_MAX * rand()
rand()与最大值相乘可以让前15位是随机的?
c库函数rand()通常返回15个随机位,使用此函数实现bigrand()返回至少30个随机位。 —— 节选自《编程珠玑》12.1
答案如下
int bigrand()
{
return RAND_MAX * rand() + rand();
}
+ rand()
是让后15位随机,但为什么RAND_MAX * rand()
rand()与最大值相乘可以让前15位是随机的?
1 回答3k 阅读✓ 已解决
1 回答3.3k 阅读
1 回答2.7k 阅读
2.5k 阅读
1 回答1.1k 阅读
1.1k 阅读
812 阅读
其实这个问题按移位来想就很简单啦。。。
拿个栗子来说吧
output
首先是a的二进制输出,然后是b的二进制输出,然后我让a向左移15位,这样它就空出了15个低位,然后我让b直接加过去,这样就产生了一个30位的随机数啦,当然我们知道,
<<
一次相当于*2
,所以那个RAND_MAX
就是2^15
咯。