天天看點

1. 寫一個函數傳回參數二進制中 1 的個數 比如: 15 0000 1111 4 個 1

題目:

寫一個函數傳回參數二進制中 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;

}

繼續閱讀