操作符(移位操作)

1.写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
将参数与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 value = 0;
	printf("请输入数字\n");
	scanf_s("%d",&value);
	printf("%d\n",count_one_bits(value));
	system("pause");
}

2.获取一个数二进制序列中所有的偶数位和奇数位,
分别输出二进制序列。
先定义一个数组,再将输入的数按位与1与,将结果给数组(即将其转化为一个二进制数),最后将数组的奇数和偶数位输出,即为所输入数的二进制奇数,偶数数列。

int arr[32] = { 0 };

int main()
{
	int number = 15;
	printf("请输入二进制序列\n");
	scanf_s("%d",&number);
	for (int i = 0; i < 32; i++)
	{
		int b = 0x1;
		if ((number >> i)& b)
		{
			arr[i] = 1;
		}
		else
		{
			arr[i] = 0;
		}
	}
	for ( int i = 31; i > 0;i = i - 2)
	{
		printf("%d",arr[i]);
	}
	printf("\n");
	printf("上面是偶数列,下面是奇数列\n");
	for (int i = 30; i >= 0; i = i - 2)
	{
		printf("%d", arr[i]);
	}
	printf("\n");
	system("pause");
}

3 输出一个整数的每一位。
用函数的递归,每一次都将其%10.并输出。

#include<stdio.h>
#include<stdlib.h>

int cout(int num)
{
    if (num < 10)
    return num;
    else
{
    int n = 0;
	n = num % 10;
	printf("%d\n",n);
	cout(num / 10);
}
}
int main()
{
	int a = 123;
	printf("请输入一个整数\n");
	scanf_s("%d",&a);
	printf("%d\n",cout(a));
	system("pause");
}

4.编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
将俩个数按位异或,然后在将得到的数与1按位与。得出结果中1的个数
就是这俩个整数不通位的个数

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	printf("请输入俩个数\n");
	scanf_s("%d",&a);
	scanf_s("%d",&b);
	for (int i = 0; i <= 32;i++)
	{
		if ((((b ^ a) >> i) & 0x1) == 1)
			c++;
	}
	printf("%d\n",c);
	system("pause");
}

猜你喜欢

转载自blog.csdn.net/huanglu12138/article/details/84254547