同时右移 data 和 mask_flag,当mask_flag的最低位是1时,记录data 的最低位并计算
只是一段合用的程序,mcu 中有一个求前导零的指令,对数字的前导零进行计数,并将结果返回,虽然可能仍需用到循环,但应该可以大幅提高效率 [解决办法] 某些 mcu 中有一个求前导零的指令 [解决办法] C++
//这个是 模仿 C++库函数写的 inline unsigned int countBitsHalfByte(unsigned char x){ // 0 1 2 3 4 5 6 7 8 9 a b c d e f return "\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4"[x]; } inline unsigned int countBitsByte(unsigned char x){ return countBitsHalfByte(x& 0xF) +countBitsHalfByte((x&0xF0)>>4); }
template<typename intT >unsigned int countBits(intT x){ int n=0; union{ intT d;unsigned char by[sizeof(x)];}v; v.d =x; for(int i = 0;i < sizeof(x); i++){ n +=countBitsByte(v. by[ i ]); } return n; }