Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何旋转给定数字的位?_C++_C_Rotation_Bits - Fatal编程技术网

C++ 如何旋转给定数字的位?

C++ 如何旋转给定数字的位?,c++,c,rotation,bits,C++,C,Rotation,Bits,如何在运行时旋转给定数量的位,输入旋转次数 例如: 二进制文件:100000000000000000001011 旋转:3次向右 结果:0111000000000000000001 同样地: 二进制文件10000000000000000000011 旋转:左4次 结果:00000000000000000010111000 下面是我要交换的代码,但我找不到旋转位的逻辑 包括 int main { int num,位左,位右,i,j; 打印机用户号码\n; 扫描%d,# 对于i=31,j=0

如何在运行时旋转给定数量的位,输入旋转次数

例如:

二进制文件:100000000000000000001011 旋转:3次向右 结果:0111000000000000000001 同样地:

二进制文件10000000000000000000011 旋转:左4次 结果:00000000000000000010111000 下面是我要交换的代码,但我找不到旋转位的逻辑

包括 int main { int num,位左,位右,i,j; 打印机用户号码\n; 扫描%d,# 对于i=31,j=0;i>j;i-,j++ { bitleft=num>>i&1;//从左开始以整数形式存储位 bitright=num>>j&1;//从右开始以整数形式存储位 ifbitleft!=bitright//检查位是否不相似 { num=num^1试试这个:

#include <iostream>

template <typename T>
T rol_(T value, int count) {
    return (value << count) | (value >> (sizeof(T)*CHAR_BIT - count));
}

template <typename T>
T ror_(T value, int count) {
    return (value >> count) | (value << (sizeof(T)*CHAR_BIT - count));
}

int main() {
    unsigned int a = 0x8000000B; // 10000000000000000000000000001011 in binary
    std::cout << "A = 0x" << std::hex << a << ", ror(A, 3) = 0x" << ror_(a, 3) << std::endl;
    std::cout << "A = 0x" << std::hex << a << ", rol(A, 3) = 0x" << rol_(a, 3) << std::endl;
    return 0;
}

@user3859409这个词在运行时没有旋转意味着什么?提供了一个干净的实现DR;可能相关:要将num向左旋转k位,请写入num>sizeofnum*CHAR_位-k。如果可能,请使用asm…我正在寻找解决方案,而不使用任何内置函数或任何库使用sizeofT和CHAR_位更新代码。
binary:               10000000000000000000000000001011
rotations: 3 times right
(value >> 3):         00010000000000000000000000000001
(value << (32 - 3)):  01100000000000000000000000000000
------------------------------------------------------
                      01110000000000000000000000000001