【发布时间】:2013-12-26 13:02:32
【问题描述】:
在使用uint16_t 时,是否有任何有效的算法允许将位bit 插入到index 的位置?我试过在index之后逐位读取,将所有这些位存储到char的数组中,在index处更改位,增加index,然后再次循环,从数组中插入位,但可以有更好的方法吗?所以我知道如何获取、设置、取消设置或切换特定位,但我想可能有比逐位处理更好的算法。
uint16_t bit_insert(uint16_t word, int bit, int index);
bit_insert(0b0000111111111110, 1, 1); /* must return 0b0100011111111111 */
附:解决方案必须是纯 ANSI 兼容的 C。我知道 0b 前缀可能特定于 gcc,但我在这里使用它是为了让事情更明显。
【问题讨论】:
-
为什么需要循环?只需同时移动所有相邻的位。你在这里的“插入”是什么意思,你从哪里计算位?在您的代码中,您在索引 0 处插入一个 0 位,但我在左侧和右侧的结果中只看到新的“1”位
-
过失;这里应该是 1 作为第二个参数,而不是零。
标签: c bit-manipulation bit bit-shift