经常做上位机软件,最近做工控了,又得复习c/c++
碰到的问题就把它记下来。
如何读取字节的每一位:
可以做个函数来用:
int read_bit(char c,int pos)
{
char b_mask=0x01;
b_mask=b_mask < <pos;
if((c&b_mask)==b_mask) //字符c和b_mask做位运算如果还是等于b_mask,说明该位为1
return 1;
else
retrun 0
}
然后在外面这样用
char c= 'c ';
int count[8],i;
for(i=0;i <=7;i++)
{
count[i]=read_bit(c,i);
}
结果就是count数组存下了字符c每位的值(不是0就是1)
然后要看的话
for(i=7;i> =0;i--)
printf( "%d ",count[i]);
最后循环倒着来是因为我们才取位的时候是从低往高取的,为了按照我们平常写是从高往低从左往右写,就把它反过来输就行了~
b_mask=b_mask < <pos;
if((c&b_mask)==b_mask) //字符c和b_mask做位运算如果还是等于b_mask,说明该位为1
楼上说的没错,我代码里b_mask=b_mask < <pos就是让0x01(00000001)移位,比如pos等于1则移位后b_mask=0x02(00000010)...依次类推,pos取7时就是0x80(10000000)!
而c&b_mask就是拿c和b_mask进行与运算,比如c是00000010而b_mask是00000001则结果是c&b_mask!=b_mask,如果c是10000000而b_mask也是10000000则c&b_mask==b_mask