对于同一个整数值的二进制数表示的位数,给定一个二进制数,如何判断对应的十进制数的奇偶性
1.计算二进制设计中1的个数1:我们可以在解数的二进制位中用%2在前/2的方法计算1的个数17。
%2
/2
第一次
一个
八
第二次
0
四
第三次
0
2
17号
%2
/2
第一次
一个
八
第二次
0
四
第三次
0
2
1转换为二进制:0000000000000000000000000000000000000001011
11号
%2
/2
0000000000000000000000001011
编号
第一次
一个
五
0000000000000000000000000101
一个
第二次
一个
2
0000000000000000000000000010
一个
第三次
0
一个
0000000000000000000000000001
一个
代码实现:
#包含stdio.h
int count_bit_one( int n)
{
int count=0;
当(名词)
{
if (n % 2==1)
{
数数;
}
n=n/2;
}
返回计数;
}
#包含stdio.h
int main()
{
int a=0;
Printf(请输入正整数:\ n );
scanf(%d ,a);
int count=count _ bit _ one(a);
printf(count=%d\n ,计数);
返回0;
}但这里要注意:由于一个数是以二进制补码的形式存储在内存中的,如果要这样计算负数,就会出现循环无法累加的问题。
解决方法:我们可以明确定义给定的整数变量是无符号的。
#包含stdio.h
int count_bit_one(无符号整数n)
{
int count=0;
当(名词)
{
if (n % 2==1)
{
数数;
}
n=n/2;
}
返回计数;
}
int main()
{
无符号int a=0;
Printf(请输入一个整数:\ n );
scanf(%d ,a);
int count=count _ bit _ one(a);
printf(count=%d\n ,计数);
返回0;
}设计二:我们可以通过将输入的整数依次向右移位,然后按位和1的个数来统计1的个数。
11号
我
一个
编号
i=0
0000000000000000000000001011
0000000000000000000000000001
一个
i=1
0000000000000000000000000101
0000000000000000000000000001
一个
i=2
0000000000000000000000000010
0000000000000000000000000001
0
i=3
0000000000000000000000000001
0000000000000000000000000001
一个
代码实现:
int count_bit_one( int n)
{
int I=0;
int count=0;
for(I=0;i 32我)
{
if (1==((n i) 1))
{
数数;
}
}
返回计数;
}
#包含stdio.h
int main()
{
int a=0;
Printf(请输入一个整数:\ n );
scanf(%d ,a);
int count=count _ bit _ one(a);
printf(count=%d\n ,计数);
返回0;
}设计三:我们可以通过按位and的方法依次得到1的数字代码:
int count_bit_one( int n)
{
int count=0;
当(名词)
{
n=n(n-1);
数数;
}
返回计数;
}
#包含stdio.h
int main()
{
int a=0;
Printf(请输入一个整数:\ n );
scanf(%d ,a);
int count=count _ bit _ one(a);
printf(count=%d\n ,计数);
返回0;
}程序运行结果:
2.计算二进制中不同位数。设计思路:要统计不同位数,第一步是给两个整型变量。第二步,利用异或的思想将两个数打包成一个中间变量,然后通过计数1的个数来计数。
XOR的主要作用是对两个二进制值不同的数的位数进行计数。
代码实现1:
#包含stdio.h
int count_bit_one(int n)
{
int count=0;
当(名词)
{
n=n(n-1);
数数;
}
返回计数;
}
int get_diff_bit(int m,int n)
{
int tmp=m^n;
返回count _ bit _ one(tmp);
}
int main()
{
int m=0;
int n=0;
Printf(请输入两个不同的整数:);
scanf(%d %d ,m,n);
int count=get_diff_bit(m,n);
printf(count=%d\n ,计数);
返回0;
}代码实现2:
#包含stdio.h
int get_diff_bit(int m,int n)
{
int tmp=m^n;
int count=0;
while (tmp)
{
tmp=tmp(tmp-1);
数数;
}
返回计数;
}
int main()
{
int m=0;
int n=0;
Printf(请输入两个不同的整数:);
scanf(%d %d ,m,n);
int count=get_diff_bit(m,n);
printf(count=%d\n ,计数);
返回0;
}程序运行结果:
3.二进制奇偶位计数的设计思路:还是用右移位的思路——依次进行统计。这里需要注意的是,设置周期时,奇数位数最高为30,其次为-2;偶数位数最多的是31,其次是-2。
代码实现:
#包含stdio.h
无效打印(整数)
{
int I=0;
Printf(奇数位:\ n );
for(I=30;I=0;i -=2)
{
printf(%d ,(m I)1);
}
printf( \ n );
Printf(偶数:\ n );
for(I=31;I=0;i -=2)
{
printf(%d ,(m I)1);
}
printf( \ n );
}
int main()
{
int m=0;
Printf(请输入一个整数:);
scanf(%d ,m);
打印(m);
返回0;
}程序运行结果:
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。