码迷,mamicode.com
首页 > 编程语言 > 详细

C语言中移位、逻辑运算符的简单应用

时间:2015-11-11 06:37:34      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:c语言常用的移位及逻辑运算符举例

&运算符
一、 计算二进制中1 的个数比如: 15       0000 1111       4 个 1
要求其数字的存储方式为int

int count_one_bits(unsigned int value)//计算1的位数函数
{
	int count;
	count=0;
	while(value)
	{
		count++;
		value=value&(value-1);//每&一次,减少一个二进制数中的“1”的个数;
	}
	return count;
}

&运算符和>>运算符的联合应用

二、获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。


#include <stdio.h>

#include <stdlib.h>

int main()

{

int i,j;

int num;//定义输入变量

int a[16],b[16];//定义存放奇数位和偶数位的数组

printf("请输入一个十进制数字:");

scanf("%d",&num);

for (i = 0 ,j = 0; j < 32; i++, j=j+2) //获取二进制数列的奇数位

{

a[15-i] = ( num>>j )&1;

}

printf("从高位到低位奇数位分别为:");

for (i = 0; i < 16; i++) //从高位到低位输出其二进制奇数位

{

printf("%d ",a[i]);

}


for (i = 0 ,j = 1; j < 32; i++, j=j+2) //获取二进制数列的偶数位

{

b[15-i] = ( num>>j )&1;

}

printf("\n从高位到低位偶数位分别为:");

for (i = 0; i < 16; i++) //从高位到低位输出其二进制偶数位

{

printf("%d ",b[i]);

}

system("pause");

return 0;

}

 | 运算符


三、判断名次是否连续

/*将名次对应一个数中的二进制位*/

int ret = 0, flag = 0;
ret |= (1 << (a - 1));
ret |= (1 << (b - 1));
ret |= (1 << (c - 1));
ret |= (1 << (d - 1));
ret |= (1 << (e - 1));
while (ret)
{
	if (0 == ret % 2)
	{
		flag = 1;
	}
	ret / = 2;
}
if (0 == flag)
{
	printf("比赛的名次为:\n");
	printf("a=%d\nb=%d\nc=%d\nd=%d\ne=%d\n", a, b, c, d, e);
}


四、寻找两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

int different_bits(int num_1, int num_2)
{
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (((num_1 >> i) & 1) ^ ((num_2 >> i) & 1))
		{
			count++;
		}
	}
	return (count);
}

五、将一个无符号数的二进制数逆置

unsigned int  reverse_bit(unsigned int num)
{
	int i = 0;
	unsigned int ret = 0;
 	for (i = 0; i < 32; i++)
	{
		ret<<=1;
		ret |= ((num >> i) & 1);
	}
	return (ret);
}

六、求两个数的平均值,无溢出

int average(int a, int b)
{
	return((a & b) + ((a ^ b) >> 1));
}

七、找出一组数据中单独出现的数字

int find_only(int arr[], int size)
{
	for (int i = 1; i < size; i++)
	{
		arr[0] ^= arr[i];
	}
	return (arr[0]);
}


C语言中移位、逻辑运算符的简单应用

标签:c语言常用的移位及逻辑运算符举例

原文地址:http://10788311.blog.51cto.com/10778311/1711621

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!