Bit Manipulation

1.  >> 和 >>>

>> is arithmetic shift right, >>> is logical shift right.

In an arithmetic shift, the sign bit is extended to preserve the signedness of the number. 

For example: -2 represented in 8 bits would be 11111110 (because the most significant bit has negative weight). Shifting it right one bit using arithmetic shift would give you 11111111, or -1. Logical right shift, however, does not care that the value could possibly represent a number; it simply moves everything to the right and fills in from the left with 0s. Shifting our -2 right one bit using logical shift would give 01111111.

public class Solution {
    public int singleNumber(int[] nums) {
        int [] counts = new int [32];
        for ( int i = 0; i < 32; i ++ ){
            for ( int j = 0; j < nums.length; j ++ ){
                counts[i] += (nums[j] >> i) & 1;
            }
        }
        int res = 0;
        for ( int i = 31; i >= 0; i -- ){
            res += counts[i] % 3;
            if ( i > 0  )
                res <<= 1;
        }
        return res;
    }
}


你可能感兴趣的:(Bit Manipulation)