请高手帮忙解释一下这段单片机的C语言程序?

voidTurnMotor(){unsignedchartmp;staticunsignedcharindex=0;unsignedcharcodeBeatCode[8]... void TurnMotor()
{
unsigned char tmp;
static unsigned char index = 0;
unsigned char code BeatCode[8] =
{
0x0E,0x0C,0x0D,0x0B,0x03,0x07,0x06
};
if(beats !=0)
{
if(beats > 0)
{
index++;
index = index & 0x07;
beats--;
}
else
{ //没有理解!
index--;
index = index & 0x07;
beats++;
}
tmp = P1;
tmp = tmp & 0xF0;
tmp = tmp | BeatCode[index];
P1 = tmp;
}
else
{
P1 = P1 | 0x0F;
}

}
这index++倒是可以理解,那index--我就有点糊涂了,index初值为0,减1后不久变成了-1了,-1和
0x07按位与又变成1了,这样index老在1和0这样来回赋值,
unsigned char code BeatCode[8] =
{
0x0E,0x0C,0x0D,0x0B,0x03,0x07,0x06
};
上面的数组就没法遍历。
展开
 我来答
百度网友61576e2
2015-11-12 · TA获得超过162个赞
知道小有建树答主
回答量:189
采纳率:100%
帮助的人:100万
展开全部
-1与0x07按位与,11111111(-1) & 00000111(7)=0000 0111(7),-1在计算机内是以补码表示的
追问
既然是1表示为0000 0001(由于需要和0x07按位与),那么-1就应该表示为1000 0001了,所以
取反1111111111111110,和 0000 0111(7)按位与后 0000 0110应该是6啊?请帮忙解答!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式