与&运算
0376的二进制就是1111 1110,二进制的与运算规则是,只有两个数同时为1时,则结果才为1,只要有一个数为0,则结果就为0。比如1&1=1; 1&0=0; 0&1=0; 0&0=0;因此把一个字符与二进制1111 1110进行与运算的结果就是把最后位设为0,而其他位不变。作个比喻假设a的二进制表示为1010 0111我们先不管这个数表示的是什么,我们来把这个数与1111 1110进行按位与运算,看看结果。
t_zset.c
#define ZSKIPLIST_MAXLEVEL 32 /* Should be enough for 2^32 elements */
#define ZSKIPLIST_P 0.25 /* Skiplist P = 1/4 */
int zslRandomLevel(void) {
int level = 1;
while ((random()&0xFFFF) < (ZSKIPLIST_P * 0xFFFF))
level += 1;
return (level<ZSKIPLIST_MAXLEVEL) ? level : ZSKIPLIST_MAXLEVEL;
}
0xFFFF=1111 1111 1111 1111
任何数和0xFFFF与运算其实就是暗含高位清零,低位与 结果就是一个0和65535之间的数