zoukankan      html  css  js  c++  java
  • float 和 long 比较

    为什么java中float表示的数据范围比long的大?

    基本类型(除了boolean外)可以自动转换的,转换形式为:byte,short,char – int --long–float–double这就是自动转换的顺序了,其中byte,short,char在运算时是自动转换为int型的,而int与long运算时自动转换为long型。从上可知,float与double运算时是自动转换为double再进行计算的,int与float运算时先转换为float再运算。也就是说,表述范围小的可以自动转换为表述范围大的,(表述范围不是指类型的大小)其次,如果你要得到某一类型的数值时,也可以通过强制转换来实现

    我们都知道,float类型的范围是:一3.403E38~3.403E38。而long类型的范围是:-2^63~2^63-1(大概是9*10^18)。

      我以前也是简单的记住就算完事了,对于它为什么会这样却没有考虑过。

      下面给大家分享一下我现在的理解:

      long整型数,在内存中占用8个字节共64位,它表示的数值有2的64次方,平分正负,数值范围是负2的63次方到正2的63次方-1。

      而float在内存中占4个字节,共32位,但是浮点数在内存中是这样的:

      V=(-1)^s * M * 2^E

     浮点数的32位不是简单的直接表示大小,而是按照一定的标准分配的。

      其中第1位,符号位,即S。

      接下来的8位,指数域,即E。

      剩下的23位,小数域,即M,M的取值范围为[1,2)或[0,1)。

      也就是说,浮点数在内存中的二进制值不是直接转换为十进制数值的,而是按照上述公式计算而来,通过这个公式,虽然只用到了4个字节,但是浮点数却比长整型的最大值要大
    这个情况的原因在于,float占的4个字节,也就是32位二进制中,1位是符号位,23位是尾数位,剩下的8位是指数位,8位代表0~255,根据IEEE 754规定,0代表0,255代表无穷大,剩下1~254,每个减去127,代表-126~127这个指数范围,也就是说float的幂级数大致范围是2的-126次幂到127次幂之间,而long是8个字节,也就是64位,除去符号位,范围在只有2的63次幂,远远小于float。

  • 相关阅读:
    个人博客开发之blogapi项目统一结果集api封装
    个人博客开发之blogapi 项目整合JWT实现token登录认证
    C语言I博客作业06
    C语言l博客作业03
    C语言I博客作业04
    C语言I博客作业05
    C语言I博客作业01
    C语言I博客作业07
    C语言I博客作业02
    UVA 11427 Expect the Expected [概率]
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/15131189.html
Copyright © 2011-2022 走看看