使用循环将7位放入一个字节

时间:2017-04-10 20:03:23

标签: c bit-manipulation bitwise-operators

我试图通过使用循环将7位写入一个字节(逐位):

unsigned char bytetosend;
unsigned char y[] = { 0x7f };
int x = 0;
int i;

int main()
{
    for (i = 0; i < 8; i++)
    {
        bytetosend = (y[x] & 0x01);
        bytetosend >>= 1;
        y[x] >>= 1;
    }
    printf("the out is %x", bytetosend);
}

但为什么输出为0?

1 个答案:

答案 0 :(得分:3)

那是因为您正在将y[x]的LSB“复制”到bytetosend的LSB,然后通过将bytetosend右移一个来删除它。

我不知道为什么你需要一点一点地复制,如果你只能通过bytetosend = y[x];一次复制整个字节,但我们假设你真的想要它。

然后你可以通过以下方式完成:

bytetosend = 0;
for (i=0; i < 8; ++i)
{
    bytetosend |= y[x] & ((unsigned char)1 << i);
}