首页 > 解决方案 > 为什么这两个代码片段没有给出相同的输出?

问题描述

我正在尝试反转数字的位。C++ 代码工作正常,但 java 输出错误

C++:

class Solution {
public:uint32_t reverseBits(uint32_t n) {
uint32_t ans=0,k=32;
while(k--)ans=ans*2+n%2,n/=2;
return ans;
}
};

爪哇:

 public int reverseBits(int n) {
        int out=0;
       int k=32;
        while(k--!=0){
            out=out*2+n%2;
            n/=2;
        }
        return out;


    }

输入 11111111111111111111111111111101

输出 1073741824 (01000000000000000000000000000000)

预计 3221225471 (10111111111111111111111111111111)

标签: javac++bit-manipulation

解决方案


与 C++ 相反,Java 没有无符号整数。所以,我认为你可以传递long给你的函数,并且只遍历前 32 位。我认为,我应该修改的只是原型有参数是long.

我希望这有帮助。


推荐阅读