1

我必须编写一个接收的函数

  • 一个二进制数,如10001, 和
  • 一个十进制数,表示我应该执行多少班次。

问题是,如果我使用 C++ operator <<,零会从后面推,但第一个数字不会被丢弃......例如

shiftLeftAddingZeroes(10001,1)

返回100010而不是00010那是我想要的。

我希望我已经说清楚了=P

4

2 回答 2

0

您想要的是移位,然后限制可以激活的输出位数(保持值为 1)。一种方法是为您想要的位数创建一个掩码,然后将移位值与该掩码相加。下面是一个代码示例,只需将 int_type 替换为您使用的值类型 - 或使其成为模板类型。

int_type shiftLeftLimitingBitSize(int_type value, int numshift, int_type numbits=some_default) {
    int_type mask = 0;
    for (unsigned int bit=0; bit < numbits; bit++) {
        mask += 1 << bit;
    }
    return (value << numshift) & mask;
}

10001,1现在的输出将是shiftLeftLimitingBitSize(0b10001, 1, 5) == 0b00010.

意识到除非你的 numbits 正好是你的整数类型的长度,否则你的数字的“前面”总是会有多余的 0 位。

于 2013-03-29T01:52:53.960 回答
0

我假设您将该信息存储在 int 中。考虑到这个数字实际上比你看到的有更多的前导零,所以你的数字很可能是 16 位,意思是00000000 00000001. 也许尝试与具有与移位后想要的数字一样多的 1 的数字进行与运算?(假设您想坚持按位运算)。

于 2013-03-28T23:35:27.240 回答