Java位运算总结-leetcode题目

按位操作符只能用于整数基本数据类型中的单个bit中,操作符对应表格:

OperatorDescription
&按位与(12345&1=1,可用于判断整数的奇偶性)
|按位或
^异或(同假异真)
~非(一元操作符)
&=,|=,^=合并运算和赋值
<<N左移N位,低位补0
>>N右移N位,(正数:高位补0,负数高位补1)
>>>N无符号右移(无论正负数,高位皆补0)
<<=,>>=,>>>=合并运算和赋值(移动相应位数再赋值给左边变量)

leetcode191:

Write a function that takes an unsigned integer and returns the number of ’1′ bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11′ has binary representation 00000000000000000000000000001011, so the function should return 3.

值得注意的是我们要将传入的int n作为无符号整数看待,但是在java中int是有符号的,我想到的方法就是利用上面的>>>无符号移位操作,代码如下:

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int num = 0;
        do{
            if((n & 1) == 1) num++;
        }while((n>>>=1) > 0);
        return num;
    }
    
    public static void main(String[] args){
        System.out.println((new Solution()).hammingWeight(11));
    }
}

 

leetcode190:

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as00111001011110000010100101000000).

Follow up:
If this function is called many times, how would you optimize it?

二进制的倒置可以用移位来进行,增加运算效率

1     public int reverseBits(int n) {
2         int rs = 0;
3         for (int i = 0; i < 32; i++) {
4             rs = (rs << 1) + (n & 1);
5             n >>= 1;
6         }
7         return rs;
8     }

 

leetcode7:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

十进制的倒置同样值得注意的就是倒置以后溢出的问题,我采用的方法就是函数内利用Long类型来进行计算,并在转换成int前与intMax进行比较,如果溢出返回0(题目要求)

 1     public int reverse(int x) {
 2         long l = new Long(x);
 3         Long tmp = 0L;
 4         while (l != 0) {
 5             tmp = tmp * 10 + l % 10L;
 6             l /= 10;
 7         }
 8         if (x > 0 && tmp > 2147483647L || x < 0 && tmp < -2147483648)
 9             return 0;
10         return tmp.intValue();
11     }

 

想到了新的解法再更新

 

    原文作者:xlturing
    原文地址: http://www.cnblogs.com/xltcjylove/p/4381877.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞