No.20 我與代碼的日常:求二進制1的個數,二進制奇偶位,輸出整數每一位,兩個數二進制中不同位的位數

學習不易,需要堅持。

  1. 寫一個函數返回參數二進制中 1 的個數
    比如: 15 0000 1111 4 個 1
    程序原型:
    int count_one_bits(unsigned int value)
    {
    // 返回 1的位數
    }

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

  3. 輸出一個整數的每一位。

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

1.
//寫一個函數返回參數二進制中1 的個數比如:15       0000 1111     4 個1


#include <stdio.h>

int count_one_bits( int value)
{
	int count = 0 ;
	int i = 0 ; //控制循環次數
	for(i=0; i<32; i++)
	{
	    //獲取每一個二進制位
		if( ( ( value>>i ) & 1) == 1 ) 
		{
			count++ ;
		}
	}
	return count ;
}

int main()
{
	int ret = 0 ;
	int input = 0 ;
	printf("----------此程序爲了求出某數二進制序列中1的個數----------\n") ;
	printf("請爲input賦值: ") ;
	scanf("%d", &input) ;
	ret = count_one_bits(input) ;
	printf("%d的二進制序列中1的個數爲:%d\n", input, ret) ;
	return 0 ;
}

運行結果:
在這裏插入圖片描述

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

#include <stdio.h>

void Get_num(int n)
{
	int i = 0 ;//控制循環次數
	//先獲取奇數位,所以i從開始
	printf("奇數位: ") ;
	for(i=0; i<32; i+=2) 
	{
		//讓n右移i位與進行&操作,得到本位的值
		printf("%d ", ((n >> i) & 1)) ;
	}

	printf("\n偶數位: ") ;

	
	//再獲取偶數位,所以i從開始
	for(i=1; i<32; i+=2)
	{
		//讓n右移i爲與進行&操作,得到本位的值
		printf("%d ", ((n >> i) & 1)) ;
	}

	printf("\n") ;

}

int main()
{
	int n = 0 ;
	printf("----------此程序爲了獲取某數二進制中的奇數位和偶數位----------\n") ;
	printf("請輸入一個整數: ") ;
	scanf("%d", &n) ;
	Get_num(n) ;
	return 0 ;
}

分析:
在這裏插入圖片描述
運行結果:
在這裏插入圖片描述

3.
//輸出一個整數的每一位。

#include <stdio.h>

void Print_Decimal_bits(int n) 
{

	if(n >9)
	{
		Print_Decimal_bits(n / 10) ;
	}
	printf("%d  ", n % 10) ;

}


int main()
{
	int n = 0 ;
	printf("----------此程序爲了獲取某數的十進制每一位----------\n") ;
	printf("請輸入一個數字: ") ;
	scanf("%d", &n) ;
	printf("十進制的每一位爲: ") ;
	Print_Decimal_bits(n) ; //打印十進制每一位
	printf("\n") ;
	return 0 ;
}

運行結果:
在這裏插入圖片描述

4.
//兩個int(位)整數m和n的二進制表達中,有多少個位(bit)不同?
//例如:1999 2299   有7個不同的比特位
#include <stdio.h>

//方法一:
int Differ_bits1(int m, int n)
{
	int count = 0 ; //計數器
	int i = 0 ; //控制循環次數
	for(i=0; i<32; i++)
	{
		if( ((m>>i) & 1) != ((n>>i) & 1) )
			count++ ;
	}
	return count ;
}

//方法二:
int Differ_bits2(int m, int n)
{
	//通過求兩數異或結果中的個數,即爲不同位的個數
	int ret = m ^ n ;
	int count = 0 ;
	int i = 0 ; //控制循環次數
	for(i=0; i<32; i++)
	{
		if( 1 ==((ret>>i) & 1) )
			count++ ;
	}
	return count ;
}

int main()
{
	int m = 0 ;
	int n = 0 ;
	int ret1 = 0 ;
	int ret2 = 0 ;
	printf("請輸入兩個值: ") ;
	scanf("%d%d", &m, &n) ;
	ret1 = Differ_bits1(m, n) ;
	ret2 = Differ_bits2(m, n) ;
	printf("不同位的個數爲: %d\n", ret1) ;
	printf("不同位的個數爲: %d\n", ret2) ;
	return 0 ;
}

運行結果:
在這裏插入圖片描述

學習不易,需要堅持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章