C语言中 i_tmp -= (i_tmp >> 4 << 4)什么意思

float f_value = 15.02;
int i_tmp;

time_t t;
srand((unsigned)time(&t));    //初始化随机种子, 否则随机数不随机

i_tmp = rand();
i_tmp -= (i_tmp >> 4 << 4);
f_value += i_tmp;

右移四位,然后再左移四位,,

移位的意思,,,

根据运算符优先级,先执行括号内部的,即就是先右移四位再左移四位, 然后运算-=.

清掉最低4-bit的值,第一个 >>4 表示右移4-bit,最低位的 4-bit 内容丢失,后面的 <<4表示再补回4-bit 的 0.