C++ 反向位算法
这是一个非常明显和简单的问题,不幸的是我遇到了一些麻烦。将给定整数中的位反转(不反转/翻转位),使MSB变为LSB,将MSB-1变为LSB+1,依此类推。在我看来,这样做的方式是将输入的最后一位存储到输出变量中,每次将该变量右移1,然后将输入左移1,并重复该过程。以下是我到目前为止编写的函数:C++ 反向位算法,c++,bit-manipulation,reverse,C++,Bit Manipulation,Reverse,这是一个非常明显和简单的问题,不幸的是我遇到了一些麻烦。将给定整数中的位反转(不反转/翻转位),使MSB变为LSB,将MSB-1变为LSB+1,依此类推。在我看来,这样做的方式是将输入的最后一位存储到输出变量中,每次将该变量右移1,然后将输入左移1,并重复该过程。以下是我到目前为止编写的函数: unsigned int oldRev(unsigned int input){ unsigned int output = 0; for(int i=0; i<((siz
unsigned int oldRev(unsigned int input){
unsigned int output = 0;
for(int i=0; i<((sizeof(int)*8)-1); i++){
output |= input&1;
output <<= 1;
input >>= 1;
}
return output;
}
unsigned int oldRev(unsigned int输入){
无符号整数输出=0;
对于(int i=0;i您需要切换两个操作的顺序:
output <<= 1;
output |= input&1;
这将迭代sizeof(int)*8-1次。比所需数字少一次。这应该是:
for(int i=0; i<sizeof(int)*8; i++){
for(int i=0;ifor(unsigned…)?非常感谢!我现在完全理解了这个问题
for(int i=0; i<sizeof(int)*8; i++){