读书人

生成[a,b]随机数的程中lt;lt;|=,amp;=的成效是

发布时间: 2013-07-04 11:45:33 作者: rapoo

生成[a,b]随机数的程中<<,|=,&=的效果是什么?
请指导一下。

这是一个别人实现的生成[a,b]随机数的程序,
rc=rc<<1;
if(_RANDOM())
rc|=one;
else
rc &=zero;
1:rc初始化为0,rc<<1,左移一位实现乘以2的效果,那么0的计算机中二进制是如何表示的?
2:rc|=one,rc&zero,是表示rc|=0x0001和rc&=0xfffe吗?这样的效果是什么,能保证[a,b]中的值都有可能被生成吗?



#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<iostream>

int _RANDOM()
{
int r=rand();
return (r%2==0);
}


int RANDOM(int a,int b)
{
int rc=0;
int i=0;


int t=ceil(log10(float(b-a))/log10((float)2)+1);

unsigned int one=0x1,zero=0xfffffffe;

srand(time(NULL));

while(i<t)
{
rc=rc<<1;
if(_RANDOM())
rc|=one;
else
rc &=zero;
if(i==(t-1)&&rc>(b-a))
{
rc=0;
i=0;
}++i;
}

return rc+a;
}



int main()
{
int a=-2,b=-2;
while(a!=-1||b!=-1)
{
std::cout<<"enter lower and upper bound of the random number and -1 to exit the program.\n";
std::cin>>a>>b;
int r=RANDOM(a,b);
std::cout<<r<<std::endl;
}


return 0;
}
[解决办法]
0 在 二进制中还是一堆 0;
1 在二进制中是 只有最后一位为 1, 所以
[解决办法]
= one 保留最后一位;
&= 0 把数清空为 0.

我没看懂那个算法, 只知道那些逻辑操作.
[解决办法]
add a bit(0 or 1) at the last each time
[解决办法]
http://bbs.csdn.net/topics/390150105
[解决办法]
看看位运算的基本知识。

读书人网 >C++

热点推荐