C語言練習(3)——語句x=x&(x-1)的真實意義
今天遇到一個非常有意思的題目
題目如下:
#include <stdio.h>
int func(int x)
{
int countx=0;
while(x)
{
countx++;
x=x&(x-1);
}
return countx;
}
int main()
{
int i = func(12345);
printf("i=%d",i);
getch();//視窗保留函式,除錯使用
return 0;
}
輸出結果:
這道題該怎麼算呢?
一開始我的做法是把它換成二進位制,然後按照x&(x-1)去算。通過計算我發現每一次進行x&(x-1)的計算就會把低位的1給去除掉。
所以它的規律就是把二進位制數(從低位到高位依次)變為0,直到把所有的1都變成0,退出迴圈。
那麼countx的值就很好確定了。它原來是算迴圈的次數,而迴圈次數取決於二進位制數1的個數數,那麼這個程式就是在計算十進位制數轉換為二進位制數後1的個數。
那麼下次遇到這個題目,只需把十進位制數轉換為二進位制數,然後數二進位制數裡面1的個數即可。
相關文章
- C++中x&(x-1)是什麼意思(京東筆試)C++筆試
- sql 語句練習(3) In MySQLMySql
- 《C程式設計語言》 練習3-5C程式程式設計
- C語言練習——資料加密C語言加密
- Day3--練習MySQL基礎語句MySql
- Matlab的if語句switch語句for迴圈while迴圈語句練習MatlabWhile
- sql 語句練習 In MySQLMySql
- sql 語句練習(2)SQL
- 《明解C語言》練習題4-2的實現C語言
- 三句義的程式語言
- 笨辦法學C 練習13:Switch語句
- oracle語句練習--初級Oracle
- 資料庫語句練習資料庫
- c語言是如何解析表示式語句"2+3*4;"的?C語言
- C語言/C++程式設計學習:和QT零距離接觸的意義C語言C++程式設計QT
- C語言goto語句以及用goto語句構成迴圈C語言Go
- 大一C語言程式設計練習題C語言程式設計
- 【C語言練習題】小球反彈問題C語言
- C語言入門級練習(敲程式碼)C語言
- C語言學習方法,怎麼學習C語言?C語言
- C語言(巨集定義)C語言
- C語言EOF含義C語言
- C語言的學習C語言
- Oracle SQL select練習語句OracleSQL
- 精典示例——while語句練習While
- c語言的定義與宣告C語言
- c語言複習C語言
- SQL語句中NULL的真實含義SQLNull
- 8.C語言的一些練習題坑整理C語言
- python基礎語句小練習Python
- 學習C語言的教材C語言
- C語言練手專案--C 語言製作簡單計算器C語言
- 《明解c語言》已看完,練習程式碼此奉上C語言
- c語言if語句是如何變成彙編程式碼的?C語言
- C/C++語言的學習方向C++
- C語言再學習C語言
- C語言學習心得C語言
- C語言訓練之杭電OJC語言