【发布时间】:2016-12-09 09:50:02
【问题描述】:
替换给定 int 的第一个 x 位:
- 要替换的位数
- 一个新的位序列
例如: 将前 4 位替换为 5 个 位序列 (1100 -> 10111)
1100 0010 1001 -> 1 0111 0010 1001
我知道如何使用std::bitset 翻转长度相同的位,但如果序列小于或大于第一个序列,我该怎么做?
编辑:为了澄清,我需要用另一个特定数量的位替换一定数量的最高有效位。我不需要算法来检查 int 是否太短而无法替换 4 位,我会处理的。我只需要切断 x 位并连接 y 位,给定一个 int(转换为位)
【问题讨论】:
-
一个关于术语的小注释:通常低位被认为是“第一个”。二进制值通常用左边的最高(或“最后”)位和右边的低位(如普通十进制数)写入。
-
数字2的前5位是什么?
-
定义“第一”。
-
用int代替bitset,可以使用shift right operator >>
-
bitset 和 int 都有固定的位数,但有时不写入前导零。因此,您可能不是用 5 位替换前 4 位,而是将 5 位“01100”替换为其他 5 位:“10111”。
标签: c++ bit-manipulation