最高位是符号位,补码形式存储。
二者的不同点在于“>>”在执行右移操作时,若参与运算的数字为正数,则在高位补0;若为负数,则在高位补1。而“>>>”则不同,无论参与运算的数字为正数或为负数,在执运算时,都会在高位补0。
左移运算没有有符号和无符号左移动,在左移时,移除高位的同时在低位补0。对于整数,如果移动导致符号变为1,那该数就变为负数
// 注意负数在无符号右移和右移(带符号)的区别
-10原始:
11111111111111111111111111110110
-10右移一位://补一
11111111111111111111111111111011
-10无符号右移一位://补0
01111111111111111111111111111011
-10无符号右移二位:
00111111111111111111111111111101
public class Test {
public static void main(String[] args) {
int number = 0;
number=10;
//原始数二进制
System.out.println(number +"原始:");
printInfo(number);
number=10;
//左移一位
System.out.println(number +"左移一位:");
number = number << 1;
printInfo(number);
System.out.println(number);
number=10;
//右移一位
System.out.println(number +"右移一位:");
number = number >> 1;
printInfo(number);
System.out.println(number);
number=10;
//无符号右移一位
System.out.println(number +"无符号右移一位:");
number=number>>>1;
printInfo(number);
System.out.println(number);
System.out.println("----------------------");
int negativeN = 0;
negativeN= -10;
//原始数二进制
System.out.println(negativeN +"原始:");
printInfo(negativeN);
negativeN= -10;
//右移一位
System.out.println(negativeN +"右移一位:");
negativeN = negativeN >> 1;
printInfo(negativeN);
System.out.println(negativeN);
negativeN= -10;
//左移一位
System.out.println(negativeN +"左移一位:");
negativeN = negativeN << 1;
printInfo(negativeN);
System.out.println(negativeN);
negativeN= -10;
//无符号右移一位
System.out.println(negativeN +"无符号右移一位:");
negativeN = negativeN >>> 1;
printInfo(negativeN);
System.out.println(negativeN);
negativeN= -10;
//无符号右移二位
System.out.println(negativeN +"无符号右移二位:");
negativeN = negativeN >>> 2;
printInfo(negativeN);
System.out.println(negativeN);
//没有无符号左移
}
/**
* 输出一个int的二进制数
* @param num
*/
private static void printInfo(int num){
System.out.println(Integer.toBinaryString(num));
}
}
//output
10原始:
1010
10左移一位:
10100
20
10右移一位:
101
5
10无符号右移一位:
101
5
----------------------
-10原始:
11111111111111111111111111110110
-10右移一位:
11111111111111111111111111111011
-5
-10左移一位:
11111111111111111111111111101100
-20
-10无符号右移一位:
1111111111111111111111111111011
2147483643
-10无符号右移二位:
111111111111111111111111111101
1073741821