No.20代码练习:求二进制1的个数,二进制奇偶位,输出整数每一位,两个数二进制中不同位的位数
学习不易,需要坚持。
-
写一个函数返回参数二进制中 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 ;
}
运行结果: