大家好,我是开车的阿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; } };