1. 程式人生 > >C語言_位運算子的實現舉例(上)

C語言_位運算子的實現舉例(上)

1.

返回引數二進位制中 1 的個數。

比如:

15

0000 1111

4 個 1

程式碼如下:

//返回引數二進位制中1的個數
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int count_one_bits(int value)
{
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (((value >> i) & 1) == 1)
		{
			count++;
		}
	}
	return count;
}
int main()
{
	printf("請輸入一個數字:\n");
	int value = 0;
	scanf("%d", &value);
	printf("二進位制中1的個數: %d\n",count_one_bits(value));
	system("pause");
	return 0;
}

2.

獲取一個數二進位制序列中所有的偶數位和奇數位,分別輸出二進位制序列。

程式碼如下:

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

void Print(int n)
{
	int i = 0;
	for (i = 31; i > 0; i -= 2)
	{
		printf("%d", (n >> i) & 1);
	}
	printf("\n");
	for (i = 30; i >= 0; i -= 2)
	{
		printf("%d", (n >> i) & 1);
	}
}


int main()
{
	printf("請輸入一個數字:\n");
	int value = 0;
	scanf("%d", &value);
	Print(value);
	system("pause");
	return 0;
}

3.

兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同? 輸入例子: 1999 2299 輸出例子:7

程式碼如下:

//輸出兩個數不同的位元位個數
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int differ1(int m,int n)
{
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (((m >> i) & 1) != ((n >> i) & 1))
		{
			count++;
		}
	}
	return count;
}

int main()
{
	printf("請輸入兩個數字:\n");
	int m = 0,n = 0;
	scanf("%d %d", &m,&n);
	printf("不同的bit位數為:%d\n", differ1(m, n));
	system("pause");
	return 0;
}