1:我們知道,整數在計算機中是以補碼的形式存儲的。如果給定一個十進制正整數是 如何轉換成二進制數的呢?用的是除以2取餘數的方法。若餘數爲1,則1的個數加 1;然後用商再除以2取餘數,直到商爲0;但是負數除2的餘數爲負數。因此,可以 在用 unsigned int 定義一個整數,將有符號數轉換成無符號數。例如-1的補碼 爲11111111 11111111 11111111 11111111。用unsigned定義11111111 11111111 11111111 11111111表示的不再是-1,而是2^32-1。但這不影響1的個數。
具體代碼如下:
#include <stdio.h>
int count_one_bits(unsigned int value)
{
int count = 0;
while (value)
{
if (1 == value%2)
{
count++;
}
value = value/2;
}
return count;
}
int main()
{
int input;
int c = 0;
scanf("%d", &input);
c = count_one_bits(input);
printf("數的二進制表示中1的個數爲:%d\n", c);
return 0;
}
2:1的二進制位00000000 00000000 00000000 00000001,a&1則可判斷的最低位 是0還是1,同樣需要使用unsigned。每進行一次按位與運算,還要將a右移一位。
#include <stdio.h>
int count_one_bits(unsigned int value)
{
int count = 0;
while (value)
{
if ((value&1) == 1)
{
count++;
}
value = value>>1;
}
return count;
}
int main()
{
int input;
int c = 0;
scanf("%d", &input);
c = count_one_bits(input);
printf("數的二進制表示中1的個數爲:%d\n", c);
return 0;
}
3:
#include <stdio.h>
int count_one_bits(int value)
{
int count = 0;
while (value)
{
count++;
value = value&(value-1);
}
return count;
}
int main()
{
int input;
int c = 0;
scanf("%d", &input);
c = count_one_bits(input);
printf("數的二進制表示中1的個數爲:%d\n", c);
return 0;
}