if((i>>j)&0x01==0)k++什么意思啊?

问题描述:

if((i>>j)&0x01==0)k++什么意思啊?
1个回答 分类:综合 2014-09-17

问题解答:

我来补答
假设i=01101100,二进制,j=7,
那么i>>j就是i右移7位,得到临时变量01,(注意这个时候i的值并没有改变)然后 临时变量01再和0x01取并运算,得1,K的值就加1,在这里0x01叫做掩码,
和你见到的网络掩码是一个作用,就是把某个值里面为一的位提取出来.
你贴上的那段代码
extern void _stdcall Init()
{
unsigned char i;
int j,k;
int cTable[256];
cTable[0]=8;
for(i=1;i!=0;i++)
{
k=0;
for(j=0;j>j)&0x01==0) k++;
}cTable[i]==k;
}
}
就是记录每个字节中不为一的bit有多少位,最多保存256个字节的信息.例如:
01101100 、00110011..
两个字节,记在cTable[0],cTable[1]里是4、4,明白了么?
 
 
展开全文阅读
剩余:2000