/*======================================================
* 位移规则 *
* 左移:最高位(符号位)不变 右边补0 *
* 右移:最高位不变 无符号数左边补0 有符号数补1 *
* 反码:最高位不变其余全部取反 *
* 补码:反码+1 *
* =====================================================/
/**
* -65 << 5
* 1000 0000 0100 0001 转2进制
* 1111 1111 1011 1111 补码(反码+1)
* 1111 0111 1110 0000 左移5位
* 1111 0111 1101 1111 反码
* 1000 1000 0010 0000 原码
* 32+2048 = 2080
* -2080
* */
static void signedLeftMove(){
System.out.println("-65<<5="+(-65<<5));
}
/**
* -71 >> 4
* 1000 0000 0100 0001 转2进制
* 1111 1111 1011 1110 反码
* 1111 1111 1011 1111 补码
* 1111 1111 1111 1011 右移4位
* 1111 1111 1111 1010 反码
* 1000 0000 0000 0101 原码
* 1+4 = 5
* -5
* */
static void signedRightMove(){
System.out.println("-71>>4 = "+(-71>>4));
}
/**
* 32 >> 3
* 0000 0000 0010 0000 2进制
* 0000 0000 0000 0100 右移3位
* 4
* **/
static void unsignedRightMove(){
System.out.println("32 >> 3 = "+(32>>3));
}
/**
* 40 << 5
* 0000 0000 0010 1000 2进制
* 0000 0101 0000 0000 左移5位
* 256+1024 = 1280
* **/
static void unsignedLeftMove(){
System.out.println("40 << 5 = "+(40<<5));
}
网友评论