大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

这道题目主要考察的是位运算。在C++中,可以使用位运算来对整数进行二进制的反转操作。

题目解答方法的文字分析

对于这个题目,我们可以使用位运算来进行反转。一种简单的思路是逐位反转。我们遍历32位整数的每一位,将其反转后放到新的32位整数中。具体步骤如下:

创建一个新的32位整数,用于存放反转后的结果。

遍历输入的32位整数的每一位,可以使用循环来实现。

对于遍历到的每一位,如果是1,则在新的整数中对应的位置写入1;如果是0,则在新的整数中对应的位置写入0。

继续处理下一位,直到遍历完整个32位整数。

返回反转后的结果。

举个例子来帮助理解,假设输入的整数 n = 5,它的二进制表示为 00000000000000000000000000000101,那么反转后的结果应该是 10100000000000000000000000000000,对应的十进制数是 1342177280。

在32位有符号整数中,负数用补码表示。因此,在反转过程中,对于负数,我们也需要正确地进行反转。可以使用以下方法来处理负数的反转:

  • 先计算负数的绝对值的反转结果,得到一个无符号整数。
  • 然后再将得到的无符号整数转换回有符号整数,同时还原符号位。

本题解析所使用的编程语言是C++。

完整且正确的编程代码如下

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int reverseBits(int n) {
        unsigned int unsignedN = static_cast<unsigned int>(n); // 将输入整数转换为无符号整数

        int result = 0;
        int power = 31; // 由于是32位整数,所以最高位对应的权值为2^31

        // 遍历32位整数的每一位
        while (unsignedN != 0) {
            int bit = unsignedN & 1; // 获取当前位的值(0或1)
            result += bit << power; // 将当前位的值放到结果中对应的位置
            unsignedN >>= 1; // 右移,处理下一位
            power--; // 权值减一
        }

        return result;
    }
};