No.20程式碼練習:求二進位制1的個數,二進位制奇偶位,輸出整數每一位,兩個數二進位制中不同位的位數
阿新 • • 發佈:2018-12-20
學習不易,需要堅持。
-
寫一個函式返回引數二進位制中 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 ;
}
執行結果: