#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
//1. 写一个函数返回参数二进制中 1 的个数
int count_one_bits(unsigned int value)
{
int count = 0;
while (value){
value = value & (value - 1);
count++;
}
return count;
}
//2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
void print_num(unsigned value)
{
int a[32] = { 0 };
int i = 0;
int count = 0;
while (value) {
a[i++] = value % 2;
value /= 2;
count++;
}
printf("2019的二进制奇数位序列");
for (i = count - 1; i >= 0; i -= 2) {
printf("%d", a[i]);
}
printf("\n");
printf("2019的二进制偶数位序列");
for (i = count - 2; i >= 0; i -= 2) {
printf("%d", a[i]);
}
printf("\n");
}
//3. 输出一个整数的每一位。
void print(int x)
{
if (x > 9){
print(x/10);
}
printf("%d ", x % 10);
}
//4.编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
int Dif_bits(int number_1,int number_2)
{
int number = number_1 ^ number_2;
int count=count_one_bits(number);
return count;
}
int main()
{
//1.计算15的二进制中1的位数
int value = 15;
int result = count_one_bits(value);
printf("%d 的二进制数中1的个数为 %d\n", value, result);
//2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
int number = 2019;//11111100011
print_num(number);
//3. 输出一个整数的每一位。
int a = 1234;
print(a);
printf("\n");
//4.输入例子: 1999 2299 输出例子:7
int number_1 = 1999;
int number_2 = 2299;
int count=Dif_bits(number_1,number_2);
printf("%d和%d的二进制有%d位不同\n", number_1,number_2, count);
system("pause");
return 0;
}