天天看點

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]);

}