HERD--位运算

时间:2022-05-03
本文章向大家介绍HERD--位运算,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

判断一个数是否是2的次方

1 static inline int hrd_is_power_of_2(uint32_t n)
2 {
3       return n && !( n & (n - 1 ));  
4 }

快速随机数

static inline uint32_t hrd_fastrand(uint64_t *seed)
{
     *seed=*seed * 1103515245 + 12345;
      return (uint32_t)(*seed >> 32);
}

一般种子数seed会取系统时间的模来作为参数,同样的时间种子会产生同样的序列,每次产生随机数的时间间隔相差不大的话,产生的随机数序列的第一个数值往往也相差不大,对于一些要求严格的场合不太适用。

所以为了使每次产生随机数的差别较大,随机性效果好,可以增加相邻两次产生随机数的时间间隔,比如用系统毫秒和微妙时间取一次模然后作为时间种子。

既适用于多线程多进程也适用于频繁调用随机数函数,可以得到各不相同的随机数序列。