package com.kkoolerter.jdk;

public class RightByteShift {

    public static void main(String[] args) {
        /*
         * 注意下面的结果,无论-1右移多少位,它的结果始终是-1。 因为符号扩展在高阶位中引进了更多的1。
         * 什么是符号扩展?答案是:右移时,空出的最高位(最左边) 由原来的最高位内容填充。这被称作“符号扩展”,在进行 右移时用来保持负数的符号。
         */
        System.out.println("-1>>1 = " + (-1 >> 1));
        
        System.out.println(HexByte.toHexString((byte) 2));
    }
}

/**
 * 把一个byte转换成十六进制表示 <br>
 * 注意,右移后的值与0x0f进行按位与操作,目的是将扩展位符号丢弃
 *
 * @author Jenson
 *
 */
class HexByte {
    private static char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
            '9', 'A', 'B', 'C', 'D', 'E', 'F' };

    public static String toHexString(byte b) {
        return new StringBuilder("0x").append(hex[(b >> 4) & 0x0f])
                .append(hex[b & 0x0f]).toString();
    }
}