写一个函数返回参数二进制中 1 的个数
方法一(%2):
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((value>>i) % 2) == 1)
{
count++;
}
}
return count;
}
int main()
{
int a = 15;
int count=count_one_bits(a);
printf("%d\n", count);
system("pause");
return 0;
}
方法二(&1):
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((value >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int main()
{
int a = 15;//8+4+2+1
int count = count_one_bits(a);
printf("%d\n", count);
system("pause");
return 0;
}
方法三(n&(n-1)):
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int count = 0;
while (value)
{
count++;
value = value&(value - 1);
}
return count;
}
int main()
{
int a = 15;//8+4+2+1
int count = count_one_bits(a);
printf("%d\n", count);
system("pause");
return 0;
}
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num = 11;
int i = 0;
int arr[32] = { 0 };
for (i = 0; i < 32; i++)
{
if (num % 2 == 0)
{
arr[i] = 0;
}
else
{
arr[i] = 1;
}
num = num / 2;
}
printf("奇数位:");
for (i = 30; i >=0; i = i - 2)
{
printf("%d", arr[i]);
}
printf("\n偶数位:");
for (i = 31; i >= 0; i = i - 2)
{
printf("%d", arr[i]);
}
printf("\n");
system("pause");
return 0;
}
输出一个整数的每一位
方法一(递归实现):
#include<stdio.h>
#include<stdlib.h>
void print(int n)
{
if (n<0)
{
n = -n;
}
if (n > 9)
{
print(n / 10);
}
printf("%d",n%10);
}
int main()
{
int num = -5444;
print(num);
system("pause");
return 0;
}
方法二(非递归实现):
#include<stdio.h>
#include<stdlib.h>
void print(n)
{
int count = 1;
int ret = n;
int i = 0;
int arr[20] = { 0 };
if (n < 0)
{
n = -n;
}
while (ret / 10)
{
count++;
ret = ret / 10;
}
ret = n;
for (i = 0; i < count; i++)
{
arr[i] = ret % 10;
ret = ret / 10;
}
for (i = count - 1; i >= 0; i--)
{
printf("%d", arr[i]);
}
printf("\n");
}
int main()
{
int num = 5444;
print(num);
system("pause");
return 0;
}
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 1999;
int b = 2299;
int c = a^b;
int i = 0;
int count = 0;
for (i = 0; i < 32;i++)
{
if (c % 2 == 1)
{
count++;
}
c = c / 2;
}
printf("%d\n", count);
system("pause");
return 0;
}