計算二進位制整數中的1 的個數
阿新 • • 發佈:2018-11-19
如果要計算一個整數的二進位制數中共有幾個1,最容易想到的方法就是下面這個方法:
while (num)
{
if (num % 2 == 1)
count++;
num = num / 2;
}
printf("二進位制中1的個數 = %d\n", count);
但是,如果要計算一個負數呢?這個方法是行不通的。例如負數-1,-1除以2得到的餘數並不是1 ,所以得到的結果就是0,但他的二進位制數其實是有一個1的,這就產生了錯誤。
下面這個程式碼就比較好,既可以計算正整數的二進位制數中1的個數,也可以計算負數的二進位制數中1的個數。
用到了右移操作符,需要注意的是一定要迴圈32次,因為變數num是一個整型變數,佔四個位元組,32位。
每右移一位,最左邊會補0,再與1進行按位與操作後就是0,而最右邊的位就是我們要判斷是不是1的那一位:
如果是1,與1按位與操作後還是1,count就加1;
如果不是1,按位與操作後,就變成0,與1按位與操作後是0,count不會變化。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = -1;
int count = 0;//計數
int i = 0;
for (i = 0; i < 32; i++)
{
if (((num >> i) & 1) == 1)
count++;
}
printf("二進位制中1的個數 = %d\n", count);
system("pause");
return 0;
}