c - 分析代码如何使前15位随机
本文介绍了c - 分析代码如何使前15位随机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
c库函数rand()通常返回15个随机位,使用此函数实现bigrand()返回至少30个随机位。 —— 节选自《编程珠玑》12.1
答案如下
int bigrand()
{
return RAND_MAX * rand() + rand();
}
+ rand()
是让后15位随机,但为什么RAND_MAX * rand()
rand()与最大值相乘可以让前15位是随机的?
解决方案
其实这个问题按移位来想就很简单啦。。。
拿个栗子来说吧
#include<iostream>
using namespace std;
void print_binary(int number)
{
if (number) {
print_binary(number >> 1);
putc((number & 1) ? '1' : '0', stdout);
}
}
int main(void){
int a=18094;
int b=18394;
print_binary(a);
cout<<endl;
print_binary(b);
cout<<endl;
a=a<<15;
print_binary(a);
cout<<endl;
int c=a+b;
print_binary(c);
cout<<endl;
}
output
100011010101110
100011111011010
100011010101110000000000000000
100011010101110100011111011010
首先是a的二进制输出,然后是b的二进制输出,然后我让a向左移15位,这样它就空出了15个低位,然后我让b直接加过去,这样就产生了一个30位的随机数啦,当然我们知道,<<
一次相当于*2
,所以那个RAND_MAX
就是2^15
咯。
这篇关于c - 分析代码如何使前15位随机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文