package com.kkoolerter.jdk;

/**
 * 位移(ByteShift)
 * @author Jenson
 *
 */
public class ByteShift {

    public static void main(String[] args) {
        byte a = 64,b;
        int i = a << 2;
        b = (byte)(a<<2);
        
        System.out.println("a的原始值:a="+a);
        System.out.println("i="+i+",b="+b);
       
        /*
         *这个程序段说明了Java在对shot的byte类型进行位移时,将会产生出人
         *意料的结果。因为对一个表达式求值 时,byte和short将自动 提升为int
         *类型,表达式结果也是一个int类型。也就是byte或short值向左移位的
         *结果是一个int,但移到左边的位超过了第31位将丢失。此外,负的byte
         *或short值在提升为int时,其符号将扩展,高阶位将用1来填充。为此
         *在一个byte或short上执行一个左移则会丢弃int结果的最高阶位。例如,
         *如果左移一个byte值,该值首先被提升为int,然后再在int上执行一个
         *左移。此时,如果需要的一个移位后的byte值,则必须丢弃结果中的前3
         *个字节,方法是将结果强制转换为byte类型。
         */
    }
}