1. 程式人生 > >No.20程式碼練習:求二進位制1的個數,二進位制奇偶位,輸出整數每一位,兩個數二進位制中不同位的位數

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

執行結果: 在這裡插入圖片描述

學習不易,需要堅持。