Java移位操作<<、>>、逻辑右移>>>Mark
public static void main(String[] args) {
int mask = 11;
System.out.println(toBinaryString(Integer.MAX_VALUE));
System.out.println("11 ----->");
System.out.println(toBinaryString(mask));
System.out.println(toBinaryString(mask>>1));
System.out.println(toBinaryString(mask<<1));
System.out.println(toBinaryString(mask>>>1));
System.out.println("-11 ----->");
mask = -11;
System.out.println(toBinaryString(mask));
System.out.println(toBinaryString(mask>>1));
System.out.println(toBinaryString(mask<<1));
System.out.println(toBinaryString(mask>>>1));
}
public static String toBinaryString(int target) {
if(target<0) return Integer.toBinaryString((target));
int mask = 1<<31;
if((mask&target)!=0){
return Integer.toBinaryString((target));
}
return Integer.toBinaryString(mask|target).replaceFirst("1", "0");
}
01111111111111111111111111111111
11 ----->
00000000000000000000000000001011
00000000000000000000000000000101
00000000000000000000000000010110
00000000000000000000000000000101
-11 ----->
11111111111111111111111111110101
11111111111111111111111111111010
11111111111111111111111111101010
01111111111111111111111111111010