Im[m/8]=Im[m/8]>>1|0x80; m++;怎么解释

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 21:08:27
Im[m/8]=Im[m/8]>>1|0x80;m++;怎么解释Im[m/8]=Im[m/8]>>1|0x80;m++;怎么解释Im[m/8]=Im[m/8]>>1|0x80;m++;怎么解释Im[]

Im[m/8]=Im[m/8]>>1|0x80; m++;怎么解释
Im[m/8]=Im[m/8]>>1|0x80; m++;怎么解释

Im[m/8]=Im[m/8]>>1|0x80; m++;怎么解释
Im[]应该是一个成员是一个字节的数组(char或unsigned char),两条语句应该是在一个循环里面的吧
那样的话,m由0变化到7时,是把Im[0]这个数的8位全部置1,如果m继续++的话,那就是把整个数组赋值为0XFF.
分析如下:
画出8个位,假设位原值为0
m=0,m/8计算得到 0,因此是数组中第一个数;接着右移一位,这样Im[0]的MSB为0;接着或上0x80,这样就将Im[0]的MSB置1;
m++;//此时m = 1
m=1,m/8仍然为0,依旧是数组中第一个数;接着右移一位,Im[0]的MSB为0,但此时由于上一次的赋值,Im[0]的次高位为1;接着或上0x80,这样就将Im[0]的MSB置1;到这里得到的二进制结果是:1100 0000;
以后m继续++;重复以上的分析,直到m=8.//m=8时,m/8 = 1,就到了第二个数了
So,结果就是将数组全部置为0xFF啦
总结就是,两条语句的等效语句是Im[i++] = 0xff;
再放到一个循环里就行了