c++ - 就地移位

标签 c++ bit shift

<分区>

我只是想知道是否有办法将数字“就地”移位? 我已经用谷歌搜索了,但我找不到任何与我想做的事情有关的东西。 假设我有数字 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/

相关文章:

c++ - C++ 类模板可以将方法名作为模板参数吗?

c++ - 在 Visual Studio 中执行 C 程序时,表达式必须具有指向对象类型 ERROR 的指针

java - 位编号 - 查找第一个集合 (ffs) 或查找第一个 (ffo) Java

audio - 导入python时位深度检测错误

linux - Grub 2、更改shift按钮

c++ - const_cast 和 UB

c++ - 从 Vector3f 转换为 Matrix4f

opencl - opencl中的bitcount实现

将一个字节转换为 8 个 boolean 值

按住特定键(shift 键)时,Qt keyPressEvent 未正确调用