Java最快速的算出乘2 和除2的结果


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

你可能感兴趣的:(java基础)