C語言練習(3)——語句x=x&(x-1)的真實意義

C~Tian發表於2020-10-04

今天遇到一個非常有意思的題目
題目如下:

#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的個數即可。

相關文章