天天看点

C语言中位移的作用,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 

#include 

int main()

{

int i,j;

int num;//定义输入变量

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

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

scanf("%d",&num);

for (i = 0 ,j = 0; j 

{

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

}

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

for (i = 0; i 

{

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

}

for (i = 0 ,j = 1; j 

{

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

}

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

for (i = 0; i 

{

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

}

system("pause");

return 0;

}

| 运算符

三、判断名次是否连续

int ret = 0, flag = 0;

ret |= (1 <

ret |= (1 <

ret |= (1 <

ret |= (1 <

ret |= (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 

{

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 

{

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 

{

arr[0] ^= arr[i];

}

return (arr[0]);

}