题目要求:要求将一个32位无符号整数所对应的二进制位反转得到的无符号整数。
解题思路:一般这种对应于二进制位的题目要考虑位运算!!而我可能对于位运算不太熟悉,每次都是用最愚蠢的办法做,虽然AC了,但是看了别人的解决方法才觉得自己好蠢,一开始我的想法就是将32位无符号整数化为二进制,存到一个含有32个元素的数组里,然后再反着计算。真是太傻了!!!!代码1,我就不多说了,随便看看应该就能看懂。
考虑位运算的方法是看了别人的解题思路写出来的,基本思想就是首先令fool=0,取得n的最后一位与fool相或,这个时候fool里面存的即使n的最后一位,然后将fool左移一位,这时n的最后一位变成了fool的第一位,并且fool的最后一位为0。将n右移一位,这时原来n的倒数第二位就成了现在的倒数第一位,取出这一位,然后与fool相与,这时fool的最后一位存的是n中的倒数第二位……,循环下去直到n的第一位被存到fool的最后一位中。当然这种方法的for循环中有很多种实现方法,可以每次右移n,也可以设置一个mask,每次左移mask。mask的作用是取得n的相应位,然后再右移。然后再与fool相与。
最后一种方法,真的是太神奇了!没有用到循环,具体思路见代码3注释。
代码实现:
1.
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
int a[32];
int i=0;
uint32_t result&