C語言 練習2 9

2021-09-06 16:07:16 字數 697 閱讀 6606

練習2-9:在求對二的補碼時,表示式x &= (x-1)可以刪除x中最右邊值為1的乙個二進位制位。請解釋這樣做的道理。用這一方法重寫下面的bitcount函式,以加快其執行速度。

#includevoid

main()

/*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 void

main()

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的花括...