<分区>
我只是想知道是否有办法将数字“就地”移位? 我已经用谷歌搜索了,但我找不到任何与我想做的事情有关的东西。 假设我有数字 0b01001101,我想将它“就地”向右移动两次,将掉落的数字附加到开头。所以它看起来像 0b01010011。 c++ 中是否有任何函数可以让我像这样向左或向右移位?
<分区>
我只是想知道是否有办法将数字“就地”移位? 我已经用谷歌搜索了,但我找不到任何与我想做的事情有关的东西。 假设我有数字 0b01001101,我想将它“就地”向右移动两次,将掉落的数字附加到开头。所以它看起来像 0b01010011。 c++ 中是否有任何函数可以让我像这样向左或向右移位?
最佳答案
您想实现一个 rotational shift
这是一个模板化版本,应该适用于所有类型的整数(包括短整型、字符型、整数和无符号/有符号的类似类型)。
template<class T>
T rotate_shift_right(T x, int shift)
{
if ((shift > 0) && (shift < (sizeof(x)*8)))
{
x = ((unsigned)x >> shift) | (x << (sizeof(x) * 8 - shift));
}
return x;
}
template<class T>
T rotate_shift_left(T x, int shift)
{
if ((shift > 0) && (shift < (sizeof(x)*8)))
{
x = (x << shift) | (((unsigned)x) >> (sizeof(x) * 8 - shift));
}
return x;
}
关于c++ - 就地移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793482/