C++ 如何旋转给定数字的位?
如何在运行时旋转给定数量的位,输入旋转次数 例如: 二进制文件: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试试这个: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
#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