数字在Java虚拟机中的表示

1、整数在Java虚拟机中的表示

        Java虚拟机中,整数有byte、short、int、long四种,分别表示8位、16位、32位、64位有符号整数。整数在计算机中使用补码表示,Java虚拟机也不例外。学习补码之前,必须先理解原码和反码。

        原码,就是符号位加上数字的二进制表示。以int为例,第1位表示符号位(正数或负数),其余31位表示该数的二进制值。

                10的原码:00000000 00000000 00000000 00001010

                -10的原码:10000000 00000000 00000000 00001010

        反码,就是在原码的基础上,符号位不变,其余位取反。

                -10的反码:11111111 11111111 11111111 11110101

        负数的补码就是反码加1,正数的补码就是原码本身。

                10的补码为:00000000 00000000 00000000 00001010

                -10的补码为:11111111 11111111 11111111 11110110

        相对于原码,使用补码作为存储方式有两个好处:统一数字0的表示,把0归入正数或负数得到的原码是不同的,但得到的补码是相同的;可以简化整数的加减法运算,只需要将补码简单相加即可得到算数加法的正确结果,无须区别正数和负数。

2、浮点数在Java虚拟机中的表示

        在Java虚拟机中,浮点数有float和double两种,分别表示32位和64位浮点数。浮点数由3部分组成,分别是符号位、指数位和尾数位。以32位float为例,符号位s占1位,表示正负数,指数位e占8位,尾数位m占剩余23位。

        浮点数-5的表示为:1 10000001 01000000000000000000000

        符号位为1,(-1)^1表示负数;指数位为10000001,(1*2^7+1*2^0)表示129;尾数位为01000000000000000000000,因为e不全为0,故尾数位要附加1(否则附加0),故实际的尾数位为101000000000000000000000,(1*2^0+1*2^-2)表示1.25。故浮点数的值为-1*2^(129-127)*1.25=-5。

        浮点数float还可以表示一些特殊的数字,如下表所示:

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值