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

如题所述

假设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<8;j++)
{
if((i>>j)&0x01==0) k++;
}cTable[i]==k;
}
}
就是记录每个字节中不为一的bit有多少位,最多保存256个字节的信息。例如:
01101100 、00110011.。。。。
两个字节,记在cTable[0],cTable[1]里是4、4,明白了么?
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-06
>>是右移运算符,先把i换成二进制形式,i>>j,将i右移j位(右移时需要注意符号位问题,对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号为0(该数为正),则左边也移入0.如果原来符号位为1,则右移时,左边移入0(逻辑右移))得到d。d和十六进制的1进行与运算得到f。若f不为0,则执行k++;若f为0,则跳出if语句。
第2个回答  2012-07-06
i 右移j位,在跟0x01进行位与运算.如果结果为真,这K++
第3个回答  2012-07-06
i向右移j位,然后与0x01相与,如果所得的值是0,那么k就+1.
第4个回答  2012-07-06
i 右移 j 位后的结果 再跟 0x01进行按拉 与运算,如果结果为0 让k自加1.追问

那这句话用什么用啊?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;
}
}这段代码是干嘛的?有什么用啊?

VB If j Mod2< >0什么意思啊
和你见到的网络掩码是一个作用,就是把某个值里面为一的位提取出来。你贴上的那段代码 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<8;j++){ if((i>>j)&0x01==0) k++;}cTable[i]==k;} ...

计算机具体是怎么输出一个字母的?
for(j = 0; j < matsize; j++) for(i = 0; i < n; i++) for(k = 0;k < 8; k++) if(mat[j * n + i] & (0x80 >> k)) \/*测试为1的位则显示*\/ putpixel(x + i * 8 + k, y + j, color);}char yi12[]={\/* 以下是 '1' 的 12点阵宋体 字模,24 byte *\/0x00,0x...

跪求MAX7219驱动数码管的时钟代码
if(i<8) temp=addr; \/\/先写入MAX7219内部寄存器地址,再向内部寄存器写入操作数值 else temp=wdata;for(j=0;j<8;j++){ CLK=0;if((temp&0x80)==0x80) DIN=1; \/\/先发送数据的最高位 else DIN=0;for(k=5;k>0;k--); \/\/时钟频率高的单片机需曾加延时时间,此处为12MHz ,k=5...

单片机4*4键盘扫描程序
这这个循环4次的程序段就是发送扫描码,再分别检测按键情况的。扫描码就是k_out,分别是0xfe;0xfd;0xfb,0xf7;这几个数是靠k_out=crol_(k_out,1);来实现的。键盘扫描,你要理解是“扫描”也就是一行一行的发送扫描码,再检测每“列”的值,这个值就是键值。

STC单片机串口程序
k = k & 0x01; \/\/if(S2RI==1) if(k==1) { \/\/RI = 0; S2CON = S2CON & 0xFE; \/\/1111,1110 S2_Interrupt_Receive_Led = 0; k = S2BUF; if(k==Self_Define_ISP_Download_Command) \/\/是自定义下载命令 { delay(); \/\/延时1秒就足够了 delay(); \/\/延时1秒就足够了 soft_reset_to_...

让步进电机正反转如何编程
第1行设置X1作为启动开关,由Y1输出脉冲,频率2000赫兹,脉冲数是2000。如果驱动器细分设置为2000,设置脉冲数为2000正好转一圈。第2行设置延时1秒,作为正反转间隔的时间。第3行设置Y2输出方向信号10秒钟,由脉冲结束时关闭此行。第4行设置的与第一行相同,由于与第3行的方向输出端同事被第2行延时...

求16个流水灯程序,有模式还可以调节快慢的,急求,谢谢。
P2=0x01; while(1) { for(i=0;i<7;i++) { P2=_crol_(P2,1);\/\/P2的值向左循环移动 DelayMS(150); } for(i=0;i<7;i++) { P2=_cror_(P2,1);\/\/P2的值向右循环移动 DelayMS(150); } } } 04 花样流水灯 \/* 名称:花样流水灯 说明:16只LED分两组按预设的多种花样变换显示 *\/ #inc...

51单片机中用定时器定时1毫秒,怎么编写
假设晶振为12MHz,不用中断时程序语句如下:TMOD=0x01;\/\/定时器0工作方式1 TH0=(65536-1000)\/256;\/\/装入初值 TL0=(65536-1000)%256;TF0=0;\/\/清溢出标志;TR0=1;\/\/启动定时器0 while(TF0==0);\/\/等待定时时间到 TR0=0;TF0=0;...

51单片机的程序,求大神给解释下,具体些
{ q=0;\/\/分清0 p=0;\/\/小时清0 TMOD=0x01; \/\/定时器0工作方式1 TH0=(65536-46080)\/256;\/\/50ms初值 TL0=(65536-46080)%256;ET0=1;\/\/定时器0中断打开 EA=1;\/\/总中断打开 while(1){ if(K1==0)\/\/启动 TR0=1;if(K2==0)\/\/暂停 TR0=0;if(K3==0) 秒清0 {m=0; } if...

单片机秒表复位程序如何写???
if(flag){ t++;if(t >= 10){ t = 0;ms++;} } 就这样 标志位就表示的秒表启动停止的,2 。 复位,复位顾名思义就是 返回到初始状态,就是0 ; 一般复位是在秒表停止的状态对秒表进行清零;先在主程序里检测按键 bit clc = 0;if(key1 == 0){ delay(); \/\/ 延时10ms if...

相似回答