位运算和浮点数的简单思考
/**
* 负数的位运算,先求补码进行位运算,计算完毕后若 符号位高位仍为负数,就再求补码
*
* 浮点数的表示是 (-1)^s * M * 2^E
* 32位的浮点数,最高位是符号位S,接着11位是指数E,剩下的8位为M
* 64位的浮点数,最高位是符号位S,接着11位是指数E,剩下的52位位M
* 精度不一致,这也就导致了float转换成double类型后结果可能会不一样的情况
*
* 例如 10.5 二进制为 1010.1 相当于 1.0101*2^3 (左移三位) 则 符号位s为0,M为1.0101,E为3
*/
public static void main(String[] args) throws Exception{
System.out.println(15 << 2);
System.out.println(-15 << 2);
System.out.println(8 >> 2);
System.out.println(-8 >> 2);
System.out.println(15 >> 3);
System.out.println(-15 >> 3);
System.out.println(-15 >>> 3);
float a = 6.4f;
double b = (double)a;
System.out.println("b= "+b);
}