位运算和浮点数的简单思考

位运算和浮点数的简单思考

/**
     * 负数的位运算,先求补码进行位运算,计算完毕后若 符号位高位仍为负数,就再求补码
     *
     * 浮点数的表示是  (-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{

        // 左移(<<) 低位补0  相当于做乘法
        System.out.println(15 << 2);// 运行结果是60
        System.out.println(-15 << 2); //运行结果是-60
        // 右移(>>) 高位补符号位
        System.out.println(8 >> 2);// 运行结果是2
        System.out.println(-8 >> 2);//运行结果是-2
        // 3、无符号右移( >>> ) 高位补0
        System.out.println(15 >> 3);// 结果是1
        System.out.println(-15 >> 3);// 结果是-2
        System.out.println(-15 >>> 3);// 结果是536870910

        float a = 6.4f;     //对于单精度 二进制表示 尾数只能表示23位的精度
        double b = (double)a;   //对于双精度 二进制表示 尾数表示的位数更多
        System.out.println("b= "+b); //6.400000095367432
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值