1. 程式人生 > >計算一個二進位制數中數字“1”的個數(位運算)

計算一個二進位制數中數字“1”的個數(位運算)

int numberOfOne( unsigned value )
{
	int count;
	for( count = 0; value != 0; value >>= 1 )
		if( ( value & 1 ) != 0 )//如果最低位是1,就增加計數器的值
			count += 1;
	return count;
}

筆記:

  1. value >>= 1 即 value = value >> 1;
    賦值運算右邊的 value >> 1 意思是把無符號數value進行向右1位的邏輯移位,然後再賦值給左邊的value。
    假設value原來等於10010110,則向右移1位後變成01001011。
    這樣把 value >>=1 作為 for 迴圈的調整語句,即可依次把每個數字都放到最低位上去進行運算。
  2. value & 1 即把 value 和 1 進行AND操作,如果兩個個位都是1,結果為1,否則結果為0。
    這樣就可以很快捷的檢驗每次位移後的數字的最後一位是否為1,如果是1,則結果為1,否則結果為0。