1. 程式人生 > >C語言——確定某數位元位中1的個數並列印其32位位元數值

C語言——確定某數位元位中1的個數並列印其32位位元數值

思想

其實也談不上什麼思想,這個題目相對還是簡單的。

首先,你得知道怎麼判斷某位是不是1,這個用模2就可以解決,比如:

1

其它數字也是如此,因此就可以得出結論:模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; }

測試

首先用小數測試,確保其邏輯正確:

1

再用較大數測試:

2

這個可以用計算器驗證,結果依然是正確的:

3