clz:查找一个数据x前置0的个数。
/** * 二分查找1的位置 */ int clzInC(unsigned int x) { if (!x) return 32; int e = 31; //1111 1111 1111 1111 0000 0000 0000 0000 if (x&0xFFFF0000) { e -=16; x >>=16; } //0000 0000 0000 0000 1111 1111 0000 0000 if (x&0x0000FF00) { e -= 8; x >>= 8; } //0000 0000 0000 0000 0000 0000 1111 0000 if (x&0x000000F0) { e -= 4; x >>= 4; } //0000 0000 0000 0000 0000 0000 0000 1100 if (x&0x0000000C) { e -= 2; x >>= 2; } //0000 0000 0000 0000 0000 0000 0000 0010 if (x&0x00000002) { e -= 1; } return e; }