2.7 类型转换

p57

标准库中包含一个可移植的实现伪随机数发生器的函数rand以及一个初始化种子数的函数srand。前一个函数rand使用了强制类型转换

unsigned long int next = 1;
/* rand函数:返回取值在0~32767之间的伪随机数 */
int rand(void)
{
    next = next * 1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
}
/* srand函数:为rand()函数设置种子数 */
void srand(unsigned int seed)
{
    next = seed;
}

p168 7.8.7 随机数发生器函数

rand()生成介于0和RAND_MAX之间的伪随机数序列,其中RAND_MAX是在头文件<stdlib.h>中定义的符号常量。下面是一种生成大于等于0但小于1的随机浮点数的方法:

#define frand() ((double) rand() / (RAND_MAX+1.0))

2.9 按位运算符

/* getbits函数:返回x中从第p位开始的n位。最右边的一位是第0位 */
unsigned getbits(unsigned x, int p, int n)
{
    return (x >> (p+1-n)) & ~(~0 << n);
}