小编Vit*_* Wu的帖子

如何快速设置64位整数中的全1之后的9位

我正在编写一个C ++程序,并且需要一个在所有现有的“ 1”之后将所有9位都设置为1的函数。

也就是说,我要编写一个void set10BitsFull(int64_t& n)将整数“ int64_t n = 0b...1000000000...set10BitsFull(n)转换n为“ 0b...1111111111...” 的函数。

(更新)将输入整数的位稀疏地设置为1,并且两个1之间至少有10位距离。对于样本输入0x20000200,期望的输出为0x3FF003FF。最后1个位之后将至少有9位0。最左边的10位将始终为零。

这是我对该功能的实现

/**
 * Inline function that set 10 bits to 1 after each set 1
 * i.e.,
 * ......1000000000...... -> ......1111111111.......
 *
 * @param n
 *      pointer of input number
 */
inline void set10BitFull(int_fast64_t *n) {
    // n = 1000000000
    *n |= (*n >> 1); // n = 1100000000
    *n |= (*n >> 2) | …
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation

4
推荐指数
1
解决办法
141
查看次数

标签 统计

bit-manipulation ×1

c++ ×1