您的位置:首页 > 其它

整数的二进制形式数反转

2015-03-25 16:05 211 查看
前些天在网上做题,看到了这么一道题:给定一个无符号32位整数,要求将其2进制形式数反转(即首尾颠倒,非按位取反),输出反转后的整数。(即如果给定的数为:43261596,它的二进制数为:00000010100101000001111010011100,将二进制数反转得到:00111001011110000010100101000000,所以期望的输出结果应该为:964176192)

当时自己的第一反应居然是:
1、先用Integer.toBinaryString(num),将整数转成二进制字符串。
2、把生成的二进制字符串放到list里面,然后进行反转。
3、用list.toString()把反转结果转成String字符串。
4、再用Integer.parseInt(str,2)把二进制字符串转回整数。

简直蠢哭_(:з」∠)_

后来在同事的提醒下才想到一个平时几乎很少用的东东:位运算。

用到位运算接下
去就简单多了


public int reverseBits(int n) {
int y = 0; //0000 0000 0000 0000 0000 0000
int digit = 0;
for(int i = 0 ; i < 32; i++){
y = y << 1; //将y左移
y = y | n & 1; //将n与1做与运算,目的是为了将n的最后一位复制下来,再去跟y做或运算,即把复制下来的值放到y上面
x = n >> 1; //将n右移
}
return y;
}

第一次循环拿到n的最后一位,把它复制到y的最后一位上面。然后y左移,n右移。

第二次循环拿到n的倒数第二位,把它复制到y的最后一位上面。然后y左移,n右移。
循环结束后,二进制数得到反转。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串 二进制 反转