上图代码的作用是算出一个int(32bit)类型数字的二进制形式的前导的零的个数。
上图代码作用如下:
32的一半为16,所以将数字使用>>>右移16bit,然后判断是否等于0,情形1:若等于0则存储前导的零个数的变量加16,接下来以同样的方式得到蓝色部分(16bit)的前导的零个数进行累加;情形2:若不等于0则接下来以同样的方式得到红色部分(16bit)的前导的零个数进行累加。
16的一半为8,若上一步为情形2则要将数字使用>>>右移24(8+16)bit,若为情形1则要将数字使用>>>右移8bit,这很麻烦,所以我们可以在上一步的情形1中将数字使用<<左移16bit并将其赋值给原先数字变量,这样子就使得该步骤的>>>右移位数一致(24bit)。
经过上图红框代码后我们只需再得到下图黄色部分的前导的零即可获得指定数字的前导的零个数。
上图黄色部分不可能全为0,因为若为0则数字为0在if语句时就已经返回32了,只能为11,10,01,所以定义存储前导的零个数的变量时初始化为1,然后在最后减去>>>右移31的数字。