溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用一個函數返回參數二進制中1的個數

發布時間:2020-06-15 10:43:13 來源:網絡 閱讀:435 作者:迎著風奔跑 欄目:編程語言
//題目:寫一個函數返回參數二進制中的1的個數
//      比如:15    0000 1111  4個1
//     程序原型:  int count_one_bit(unsigned int value)
//                { 
//                        //返回1的個數
//                 }
   
#include<stdio.h>
#include<stdlib.h>
int count_one_bit(unsigned int value)
{
    int count = 0;
    int n;
    while(n)
	{
	      if(n%2==1)
		count++;
		n = n/2;
	}
	return count;
}

int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = count_one_bit(n);
printf("%d\n",ret);
system("pause");
return 0;
}

運行結果:

用一個函數返回參數二進制中1的個數



上面是第一種實現方法,用模2、除2的方法將數字進一步的統計二進制1的個數


除此之外還可以用通過for循環來使數字在計算器中移位比特位的方法,如下:

//00000000 00000000 00000000 00001111
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000111
//數字進入循環后右移0位,與1后為1,統計一個1,i加1,一步一步循環統計
for(i=0; i<32; i++)
{
    if(((n>>i)&1)==1)  
        count++;
}


這道題我們讓n和比它小1的數字相與,舉一些例子我們就不難發現,每次相與之后的數字的二進制就比n的二進制數字少一個1,并且每次都是少最右邊的那個1,因此我們還可以用這個方法來統計參數二進制1的個數:

while(n)
{
    count++;   //當參數能夠進入while循環時,說明條件為真,它當中至少有一個1,所以先統計,
              //否則統計結果會少一個1
    n = n&(n-1);
}


到這兒,可能細心的人會發現,如果以上程序輸入-1時,程序是無法執行的,因為我們給出的原型中是無符號整型,變量的最小范圍是0到65535,而整型的變量的最小范圍為-32767到32767,要想正確統計-1的二進制1,只要將函數形參改成  int n 就可以了(只適用上面與或者移位運算的模塊程序)

用一個函數返回參數二進制中1的個數



如有補充,盡情評論指教

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女