C编程按位运算符&=努力理解它在做什么[复制]

8iwquhpp  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(102)

此问题在此处已有答案

(9个答案)
昨天关门了。
我试图弄清楚这部分代码是如何工作的。REF状态&= 0X 07;

static uint8_t state = 0;
    /*  values for half step             0001, 0011, 0010, 0110, 0100, 1100, 1000, 1001*/
    static const uint8_t HalfSteps[8] = {0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09};
    uint8_t delay;

    do
    {
        if (Count > 0)
        {
            PORTC = HalfSteps[state];   /* drive stepper to select state */
            state++;                    /* step one state clockwise */
            state &= 0x07;              /* keep state within HalfStep table */
            Count--;

状态++之后的部分将从0开始增加,我知道它在超过7之后重置为0。
但不知道这是如何实现的,我读过,它基本上意味着。
状态=状态+7,但这看起来不对。
任何简单的解释将不胜感激。

f87krz0w

f87krz0w1#

以下三行都是等效的:

state &= 0x07;
state = state & 7;
state = state % 8;

其效果是确保状态始终小于8,并且7之后的状态是0,而不是8。

相关问题