C++ 反向位算法

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

这是一个非常明显和简单的问题,不幸的是我遇到了一些麻烦。将给定整数中的位反转(不反转/翻转位),使MSB变为LSB,将MSB-1变为LSB+1,依此类推。在我看来,这样做的方式是将输入的最后一位存储到输出变量中,每次将该变量右移1,然后将输入左移1,并重复该过程。以下是我到目前为止编写的函数:

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++){