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++筆試
- 《C程式設計語言》 練習3-5C程式程式設計
- C語言練習——資料加密C語言加密
- 三句義的程式語言
- Day3--練習MySQL基礎語句MySql
- 《明解C語言》練習題4-2的實現C語言
- 笨辦法學C 練習13:Switch語句
- c語言是如何解析表示式語句"2+3*4;"的?C語言
- oracle語句練習--初級Oracle
- C語言/C++程式設計學習:和QT零距離接觸的意義C語言C++程式設計QT
- C語言學習方法,怎麼學習C語言?C語言
- C語言-for迴圈之窮舉法練習C語言
- 大一C語言程式設計練習題C語言程式設計
- 【C語言練習題】小球反彈問題C語言
- c語言的定義與宣告C語言
- python基礎語句小練習Python
- c語言複習C語言
- 加更—迴圈語句的練習題
- c語言if語句是如何變成彙編程式碼的?C語言
- 8.C語言的一些練習題坑整理C語言
- C語言練手專案--C 語言製作簡單計算器C語言
- C/C++語言的學習方向C++
- Python學習筆記3(條件語句+迴圈語句)Python筆記
- C語言再學習C語言
- C語言學習心得C語言
- C語言程式設計練習 GPS資料處理C語言程式設計
- C語言學習【3】——判斷與迴圈C語言
- 我的C語言學習之路C語言
- C語言訓練之杭電OJC語言
- c語言函式指標的定義C語言函式指標
- C語言語句知識結構大學霸IT達人C語言
- C語言全面總結-3C語言
- x86彙編反編譯到c語言之——(2)if語句編譯C語言
- SQL語言基礎(SELECT語句)SQL
- C語言實用之道C語言
- C語言實驗二C語言
- C語言實驗1C語言
- C 語言學習筆記筆記