javase-位运算符

/*
 * <<:左移 左边最高位丢弃,右边补齐0
 * >>:右移 最高位是0,左边补齐0;最高位是1,左边补齐1
 * >>>:无符号右移 无论最高位是0还是1,左边补齐0
 * 面试题:
 * 请用最有效率的方式写出计算2乘以8的结果?
 *      2 << 3
 */
public class OperatorDemo {

    public static void main(String[] args) {
        
        //<< 把<<左边的数乘以2的移动次幂
        System.out.println(3<<2);//3*2^2=12
        //>> 把>>左边的数除以2的移动次幂
        System.out.println(24>>2);//24/2^2=6
        System.out.println(24>>>2);
        System.out.println(-24>>>2);
    }

}
/*
 * <<左移:
 * 计算出3的二进制:11
 *     00000000 00000000 00000000 00000011
 * (00)000000 00000000 00000000 0000001100
 * >>右移:
 * 计算出-24的二进制:11000
 * 原码:10000000 00000000 00000000 00011000
 * 反码:11111111 11111111 11111111 11100111
 * 补码:11111111 11111111 11111111 11101000
 *      1111111111 11111111 11111111 111010(00)
 * 反码:1111111111 11111111 11111111 111001
 * 原码:1000000000 00000000 00000000 000110    
 * 结果:-6
 * >>
 */

 

posted @ 2019-02-28 11:31  灞波儿儿奔  阅读(142)  评论(0编辑  收藏  举报