學習不易,需要堅持。
-
寫一個函數返回參數二進制中 1 的個數
比如: 15 0000 1111 4 個 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位數
} -
獲取一個數二進制序列中所有的偶數位和奇數位,
分別輸出二進制序列。 -
輸出一個整數的每一位。
-
編程實現:
兩個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 ;
}
運行結果: