練習2-9:在求對二的補碼時,表示式x &= (x-1)可以刪除x中最右邊值為1的乙個二進位制位。請解釋這樣做的道理。用這一方法重寫下面的bitcount函式,以加快其執行速度。
#includevoidmain()
/*bitcount:獲得x(二進位制)中1的個數
*/int
bitcount(unsigned x)
}return
b;}
解題思路:對於x的二進位制形式,分為兩種:最右邊二進位制位為0和最右邊二進位制位為1
如果x的形式如***1, 那麼x & (x-1)應該為 ***0 & ***1 = ***0。 例如: 110_100_101 & 110_100_100 = 110_100_100。最右邊的1被刪除。
如果x的形式如xx10..00, 那麼x & (x-1)應該為 xx01..11 & xx10..00 = xx00..00例如: 110_100_100 & 110_100_011 = 110_100_000。最右邊的1被刪除。
**實現:
#include voidmain()
printf(
"1-bit count: %d\n
", count);
}
C語言演算法檢驗 2 9題
又一道演算法檢驗,簡直可怕 筆者又加了系統自帶的pow進行了測試 include include include includedouble a,b,c double algorithm1 pre double x,int n double temp 1 for int i 0 i po出結果,非常...
C語言練習
練習1 include stdlib.h include iostream.h include stdio.h void main cout 輸入檔案1的資料內容 以 結束 while ch stu n void input char a a用於接收要寫入資料的檔名 inti file fp if ...
c語言練習
經常練練,有易於身心健康,避免出沒遇到熊。1 請編寫函式fun,對長度為7個字元的字串,除首 尾字元外,將其餘5個字元按ascii碼降序排列。例如,若原來的字串為ceaedca,則排序後輸出為cedceaa。注意 部分源程式給出如下。請勿改動主函式main和其他函式中的任何內容,僅在函式fun的花括...