-----程序真的要用这个函数多次,那么用我的那种做法应该更合理----
这点我非常非常的赞同。
不过你给的那个函数还不如这样:
int fun(int n){ //最高位的符号位1不考虑。
int s = 0 ;
if ( 0==(n&=0x7fffffff) ) return 0;
while( ++s,n&=n-1 )
;
return s;
}
这样的函数要用循环来实现,有可能需要31次循环,每次循环也要比较,位运算,转跳,减法等。对于1的位数比较小的数,确实要快一点。
这点我非常非常的赞同。
不过你给的那个函数还不如这样:
int fun(int n){ //最高位的符号位1不考虑。
int s = 0 ;
if ( 0==(n&=0x7fffffff) ) return 0;
while( ++s,n&=n-1 )
;
return s;
}
这样的函数要用循环来实现,有可能需要31次循环,每次循环也要比较,位运算,转跳,减法等。对于1的位数比较小的数,确实要快一点。
悄悄地来。。。 然后悄悄地走。。。。。。