題目:
寫一個函數傳回參數二進制中 1 的個數
比如: 15 0000 1111 4 個 1
程式原型:
int count_one_bits(unsigned int value)
{
// 傳回 1的位數
}
題目解析:整型int 在記憶體單元中所占用的記憶體為4位元組即32比特位,要判斷一個2進制數有多少個位數為1,則需要判斷32次,首先可建構出一個for循環來實作這一過程。其次,如何判斷目前位置的數字是不是1,這裡需要用到位運算符 &(按位與),即相同為1,相異為0;而這個運算符是作用于目前位,如何使之與整型數的32位依次比較,可以用 <<(左移) 和 >>(右移)來實作。每當循環次數+1;讓1左移一位,與目标數目前位置的數進行比較,如果比較值不等于0,則計數器+1;如果比較值等于0,則跳過,繼續進行下次循環,直到比較完所有的32位,輸出計數器的值即可。
代碼如下:(運作環境為vs2013)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int count_one_bits(unsigned int value)
{
int count = 0; // 計數器
for (int i = 0; i < 32; i++){
if ((value & (1 << i)) != 0){
count++;
}
}
return count;
// 傳回 1的位數
}
int main(){
int temp;
printf("請輸入一個整數:\n");
scanf("%d", &temp);
printf("這個整數的二進制序列中有%2d個1!\n", count_one_bits(temp));
system("pause");
return 0;
}