snlux
2020-07-22 05:38
采纳率: 50%
浏览 88

求一个二进制移位算法或思路

如下面的循环,需要把 buf 中所有的元素都向左或向右移动指定二进制位,寻求大神指点。

unsigned char buf[4096];

for (;;)
{
    recv(s, buf, sizeof(buf), 0);
}
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2020-07-22 09:29

    向左移动一位,移动的位丢弃,右边补0:
    int ca = 0;
    for (int i = n - 1; i >= 0; i--)
    {
    int ca1 = buf[i] / 2;
    buf[i] = buf[i] * 2 + ca;
    ca = ca1;
    }
    向右移动一位,移动的位丢弃,左边补0:
    int ca = 0;
    for (int i = 0; i < n; i++)
    {
    int ca1 = buf[i] % 2;
    buf[i] /= 2;
    if (ca) buf += 128;
    ca = ca1;
    }
    多位你就调用多次。

    打赏 评论

相关推荐 更多相似问题