求二進位制數中1的個數

2021-07-31 21:08:20 字數 760 閱讀 9578

方法一:

根據整型數除法特點, 通過除2判斷末位是否為1

//通過餘數判斷末位是否為1 

int count(int n)

return res;

}

方法二:

用位運算, 通過和1做與運算判斷末位是否為1

//位操作, 通過和1做與運算, 判斷末位是否為1

//時間複雜度為log2(n), 等於該整數的二進位制表示位數

int count(int n)

return res;

}

方法三:

在方法二的基礎上優化時間複雜度, 從log2(n)到o(m)

//時間優化, 複雜度為o(m) 

//每次通過和(n-1)做與運算,將最低位的1變為0(若乙個數為2的n次方,則只有乙個1)

int count(int n)

return res;

}

練習1

判斷乙個數是否為奇數

bool judge(int n)
練習2

給定兩個二進位制表示的正整數a, b, 將a變成和b一樣需要改變多少位

思路:對a^b的結果求1的位數(異或運算)

int count(int n, int p) 

return res;

}

求二進位制數中1的個數

解法一 可以舉乙個八位的二進位制例子來進行分析。對於二進位制操作,我們知道,除以乙個2,原來的數字將會減少乙個0。如果除的過程中有餘,那麼就表示當前位置有乙個1。以10 100 010為例 第一次除以2時,商為1 010 001,余為0。第二次除以2時,商為101 000,余為1。因此,可以考慮利用...

求二進位制數中1的個數

對於乙個位元組 8bit 的變數,求其二進位制表示中 1 的個數,要求演算法的執行效率盡可能地高。解法一 可以舉乙個八位的二進位制例子來進行分析。對於二進位制操作,我們知道,除以乙個2,原來的數字將會減少乙個0。如果除的過程中有餘,那麼就表示當前位置有乙個1。int count int v int ...

求二進位制數中1的個數

對於乙個位元組 8bit 的無符號整型變數,求其二進位制表示中 1 的個數。c codes as below using system class program static void main string args program program new program for int i 0...