1. 程式人生 > >操作符(移位操作)

操作符(移位操作)

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");
}