Java 移位运算符:<< ,>>, >>>
1.<< :左移运算符,num<< 1,不区分正负数,低位补0,相当于num*2
2.>> :右移运算符,num>>1,如果该数为正,则高位补0,若为负数,则高位补1
3.>>> :无符号右移,忽略符号位,空位都以0补齐
import javax.print.attribute.standard.PrinterInfo;
/**
* @author Evan Yang
* @version 1.0
* @create date:2019-5-6
*/
public class DisplacementDemo {
public static void main(String[] args) {
int number=20;
System.out.println("原始number的二进制结果是:"+Integer.toBinaryString(number));
//左移
Integer leftOneNumber=number<<1;
//相当于乘以2
System.out.println("左移一位number的值是:"+leftOneNumber);
System.out.println("左移一位number的二进制结果是:"+Integer.toBinaryString(leftOneNumber));
Integer leftTwoNumber=number<<2;
//相当于乘以4
System.out.println("左移两位number的值是:"+leftTwoNumber);
System.out.println("左移两位number的二进制结果是:"+Integer.toBinaryString(leftTwoNumber));
//右移
Integer rightOneNumber=number>>1;
//相当于除以2
System.out.println("右移一位number的值是:"+rightOneNumber);
System.out.println("右移一位number的二进制结果是:"+Integer.toBinaryString(rightOneNumber));
Integer rightTwoNumber=number>>2;
//相当于除以4
System.out.println("右移两位number的值是:"+rightTwoNumber);
System.out.println("右移两位number的二进制结果是:"+Integer.toBinaryString(rightTwoNumber));
}
}
运行结果为:
原始number的二进制结果是:10100
左移一位number的值是:40
左移一位number的二进制结果是:101000
左移两位number的值是:80
左移两位number的二进制结果是:1010000
右移一位number的值是:10
右移一位number的二进制结果是:1010
右移两位number的值是:5
右移两位number的二进制结果是:101
看了以上demo,现在是不是对java左右移了解了很多了呢?
>>> : 表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
正数: r = 20 >>> 2
的结果与 r = 20 >> 2 相同;
负数: r = -20 >>> 2
注:以下数据类型默认为int 32位
-20:源码:10000000 00000000 00000000 00010100
反码:11111111 11111111 11111111 11101011
补码:11111111 11111111 11111111 11101100
右移:00111111 11111111 11111111 11111011
结果:r = 1073741819