将一个字节转换为8个布尔值

Ofi*_*fir 1 c byte boolean shift bit

我想知道我怎样才能获得一个8位变量,并将其分解为8个布尔值,用于'for'循环.例如:

void byteWrite(byte byteIn)
{
  for(int i=0; i<8; i++)
  {
    PORTA |= 128; // STHP ON
    if(?)
      PORTB |= 4; //STCP ON
    else
      PORTB &=11;// STCP OFF
    _delay_ms(1);
    PORTA &= 63; // STHP OFF
    _delay_ms(1);
  }
  PORTB |= 2; // DS ON
  _delay_ms(1);
  PORTB &= 1; // DS OFF
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

unw*_*ind 7

使用按位 - 和,使用班次:

if((byteIn & (1 << i)) != 0)
Run Code Online (Sandbox Code Playgroud)

这只是(1 << i)为循环中的每一步计算位掩码,并使用按位和(&运算符)来检查是否设置了相应的位byteIn.

这是一件很常见的事情.

如果您担心在每次迭代时重新计算掩码,您可以使用常量掩码1(即仅检查最右边的位),而是byteIn在每次迭代时移位:

if((byteIn & 1) != 0)
 ...
else
 ...
byteIn >>= 1;
Run Code Online (Sandbox Code Playgroud)

最后一行byteIn向右移一位,以便在下一次迭代时检查下一位.这可以更快,因为它在机器代码中稍微简单一些(特别是对于较小的处理器,这看起来像PIC代码).

请注意,上面的两个解决方案首先从最不重要(最右边)位迭代,如果这不合适,您当然需要反转它.