水字数
我们初学C语言都知道 %d是打印十进制,%x表示打印十六进制,%c是打印字符等等,但是很显然啊,我们都有尝试过 %b并不能实现打印二进制,这就需要我们自己编码让这个数转为二进制。
方法可以是循环,可以是分支,也可以用指针的方式来实现。
循环
// 下方参与计算的数,可以换成十进制,十六进制都可以的
while语句(其实看着有点长了,把while换成for的可以少好几行):
#include<stdio.h>
int main()
{
int a = 0b10011100, b = 0b11001010, i=0,c,n[8]; //这里a,b是参与计算的数,i作为循环粗疏,数组n用来存放二进制数最后进行一个输出,c则是存储a,b运算出来的十进制数
c = a & b; //存储a和b按位与运算的十进制结果
while(c>0) //循环条件就是在c不断被取余后还要大于0
{
if (c % 2 == 0) //当c被取余并且等于0,那么就往数组里存0,否则就存1
n[i]=0;
else if (c % 2 != 0)
n[i]=1;
else //这俩句写不写其实都行,只是想规范一点
break;
c = c / 2; //这里是让c进行一个被赋值,因为上面的模运算(也就是取余数)并不会改变c的初始值
i++; //i自加让数组被存储的位置不会重复冲突
}
for (i = 7; i > 0; i--) //因为取余法都需要倒着读,所以我们直接把存储好的数组倒着放出来那就是所需要的二进制数了
{
printf("%d",n[i]);
}
}
/*
for(;c>0;i++,c/=2) //可以直接替换掉while语句段
{
if (c % 2 == 0)
n[i]=0;
else if (c % 2 != 0)
n[i]=1;
}
*/
其实后面我写到循环那一章后这个都是比较简单的