C語言——確定某數位元位中1的個數並列印其32位位元數值
阿新 • • 發佈:2019-02-19
思想
其實也談不上什麼思想,這個題目相對還是簡單的。
首先,你得知道怎麼判斷某位是不是1,這個用模2就可以解決,比如:
其它數字也是如此,因此就可以得出結論:模2為0的,其最低位就是0.反之為1
接下來就是要判斷所有位元位的數值了,這個可以用右移操作來實現,直觀地說就是不斷除2,這樣使得要判斷的每一個位元位最終都移到最後一位,再用上邊的辦法判斷即可。
最後再加上count計數器,就可以輕鬆實現1個數的統計了。
而列印位元位就更簡單了,只要建立一個數組,初始化為0。每一次判斷後將相應位置1,再變換下標記可。
Code
#include<iostream>
#include<Windows.h>
using namespace std;
int main()
{
cout << "請輸入要判斷的數字:" << endl;
int num = 0;
cin >> num;
int count1 = 0;
//定義陣列儲存位數
char bit[32] = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' , };
//從最低位開始列印
int i = 31;
while (num)
{
if (num % 2 == 1)//模2結果為1表明該位元位數值為1
{
count1++;
bit[i] = '1';
num /= 2;//資料不斷右移使當前處理的位元位是最後一位,便於處理
i--;
continue;
}
num /= 2;
i--;
}
cout << "該數位元位列印如下:" << endl;
for (int i = 0; i < 32; i++)
{
cout << bit[i];
}
cout << endl;
cout << "對應位元位中1的個數為:" <<count1<< endl;
cout << endl;
system("pause");
return 0;
}
測試
首先用小數測試,確保其邏輯正確:
再用較大數測試:
這個可以用計算器驗證,結果依然是正確的: