1.写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
#include <stdio.h>
#include <Windows.h>
int count_one(unsigned int value)
{
int count = 0;
while (value)
{
if (value % 2 == 1)
{
count++;
}
value = value / 2;//右移一位
}
return count;
}
int count_two(unsigned int value)
{
int count = 0;
while (value)
{
count++;
value = value & (value - 1);
}
return count;
}
int main() {
int count_1 = count_one(15);
int count_2 = count_two(15);
printf("对应二进制中 1 出现的次数:\n%d\n", count_1);
printf("对应二进制中 1 出现的次数:\n%d\n", count_2);
system("pause");
return 0;
}
2.获取一个数的二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
#include <stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
void get_value() {
int value = 0;
printf("请输入数字:");
scanf("%d", &value);
int a[32];
int i = 0;
for (i = 0; i < 32; i++){
a[i] = value % 2;
value /= 2;
}
printf("偶数:");
for (i = 31; i >= 0; i -= 2){
printf("%d", a[i]);
}
printf("\n");
printf("奇数:");
for (i = 30; i >= 0; i -= 2){
printf("%d", a[i]);
}
printf("\n");
}
int main(){
get_value();
system("pause");
return 0;
}
3. 输出一个整数的每一位。
#include <stdio.h>
#include <Windows.h>
#pragma warning(disable:4996)
void play(int x){
if (x != 0)
{
printf("%d", x % 10);
play(x / 10);
}
printf("\n");
}
int main()
{
int x;
printf("请输入整数:");
scanf("%d", &x);
play(x);
system("pause");
return 0;
}
4.编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
#include<stdio.h>
#include<Windows.h>
int main()
{
int u = 0;
int m = 0;
int n = 0;
int count = 0;
printf("请输入两个数:\n");
scanf_s("%d %d", &m, &n);
u = m ^ n; //m和n异或
while (u) //相当于找出一个数;二进制中1的个数
{
count++;
u = u & (u - 1);
}
printf("count=%d", count);
system("pause");
return 0;
}