力扣刷题——190. 颠倒二进制位

190. 颠倒二进制位

位运算

我的思路是用类似写191. 位1的个数的方法,也是用循环记录,只不过是从左边开始,利用记录生成颠倒后的数,但是方法貌似有点笨。

看完提示恍然大悟,可以从右边开始循环记录,记录完右移再记录即可

public class Solution {
	    // you need treat n as an unsigned value
	    public int reverseBits(int n) {
	        
	    	int ans = 0;
	    	
	    	for (int i = 0; i < 32; ++i) {
                ans <<= 1;//先左移,若加完1再左移会错
	    		if ((n & 1) != 0) {
	    			ans += 1;
	    		} 
	    		n >>>= 1;//因为是无符号的,所以使用逻辑右移动
	    		
                //另外的方法是不用加的形式,用或来增加1
                //ans = (ans << 1) | (n & 1);
                //n >>>= 1;
	    	}
	    	
	    	
	    	return ans;
	    }
	}
	

posted on 2023-02-22 22:06  pumpkinsBig  阅读(23)  评论(0)    收藏  举报

导航