opencv rand函数

关于rand()的用法求解释

AngleLove » 2011-08-06 17:40

我知道int rand(void)返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子, rand()在调用时会自动设随机数种子为1。但是有句代码我还是不懂,急求解释!
代码如下:
cvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255);
rand()&255 代表什么意思啊?
AngleLove
OpenCV小学生
 
帖子: 8
注册: 2011-08-03 10:16
页首

Re: 关于rand()的用法求解释

guoming0000 » 2011-08-07 19:03

AngleLove 写道:我知道int rand(void)返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子, rand()在调用时会自动设随机数种子为1。但是有句代码我还是不懂,急求解释!
代码如下:
cvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255);
rand()&255 代表什么意思啊?


这个语句和这句话 rand()%256意思是一样的,就是随即产生0~255的整数。
这个人使用了&,也就是AND运算,而255的二进制是11111111,而 rand()产生的是-32768~32767之间的数,这个255的二进制前面补零,0000 0000 1111 1111,在和 rand()进行想与操作。。。。反正最有意思就是和上面求余一样。只是这样写的人比较少。
guoming0000
OpenCV硕士生
 
帖子: 264
注册: 2011-03-11 13:59
页首

Re: 关于rand()的用法求解释

AngleLove » 2011-08-08 9:15

呵呵,非常感谢!我也了解了一些,那个“&”是进行“位与”运算的,正如你说的255的二进制是1111 1111,将255的二进制前面补零,0000 0000 1111 1111,而 rand()与255进行“位与”运算就是产生一个0~255之间的随机数!
最后由 AngleLove 编辑于 2011-08-08 11:40,总共编辑了 1 次
AngleLove
OpenCV小学生
 
帖子: 8
注册: 2011-08-03 10:16
页首

Re: 关于rand()的用法求解释

mochen2011 » 2011-08-08 10:57

代码: 全选
cvScalar color = CV_RGB(rand()&255,rand()&255,rand()&255);

赞同楼上的说法。写成 rand()&255,实际上是等价于 rand()%256。这是显示内功的一种方式,找工作的时候,
你这样一写,给人的感觉比用 rand()%256要好得多。

你可能感兴趣的:(OpenCV)