十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
在C語言的學習中我們也許會遇到求一個數(shù)的二進制序列中1的個數(shù)的題目
下面我們介紹一種相對簡易的方法?
int main()
{
int i = 0;//定義一個i變量,即我們需要求二進制形式中1的個數(shù)的數(shù)字
scanf("%d", &i);//輸入變量i的值
int count = 0;//定義一個變量以表示1的個數(shù)
while (i)
{
i = i & (i - 1);
count++;
}
printf("%d", count);//輸出
return 0;
}
考慮到&操作符的特性
我們可以選取&操作符來達到我們的目標。
假設(shè)i的值為15,則i的二進制序列為 1111
若給i按位與上i-1 即i&(i-1)
此時即是1111-i
?1110-(i-1)
?? ?1110-i&(i-1)
我們發(fā)現(xiàn)i最低位的1變成了0
此時我們再進行一遍 1110-i
??? ? ? ? ? ? ? ? ? ?1101-(i-1)
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1100-i&(i-1)
我們發(fā)現(xiàn)i的1又減少了一個
那么以此類推,i每按位與一次(i-1)i的二進制形式中就會減少一個1,而最終i的值會變成0
考慮到while循環(huán)的特性(判斷條件非0即進入循環(huán)),我們就可以寫出上述的代碼
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧