gpt4 book ai didi

将一个字节转换为 8 个 boolean 值

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:04 25 4
gpt4 key购买 nike

我想知道如何获取一个 8 位变量,并将其分解为 8 个 boolean 值,用于“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
}

谢谢。

最佳答案

使用按位与,带移位:

if((byteIn & (1 << i)) != 0)

这只是计算位掩码 (1 << i)对于循环中的每个步骤,并使用按位与(& 运算符)来检查 byteIn 中的相应位是否已设置。

这是一件很常见的事情。

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

if((byteIn & 1) != 0)
...
else
...
byteIn >>= 1;

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

请注意,上面的两种解决方案都是从最不重要(最右边)的位开始迭代,如果这不合适,您当然需要将其反转。

关于将一个字节转换为 8 个 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27925226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com