我必须编写一个接收的函数
- 一个二进制数,如
10001
, 和 - 一个十进制数,表示我应该执行多少班次。
问题是,如果我使用 C++ operator <<
,零会从后面推,但第一个数字不会被丢弃......例如
shiftLeftAddingZeroes(10001,1)
返回100010
而不是00010
那是我想要的。
我希望我已经说清楚了=P
您想要的是移位,然后限制可以激活的输出位数(保持值为 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 位。
我假设您将该信息存储在 int 中。考虑到这个数字实际上比你看到的有更多的前导零,所以你的数字很可能是 16 位,意思是00000000 00000001
. 也许尝试与具有与移位后想要的数字一样多的 1 的数字进行与运算?(假设您想坚持按位运算)。