zoukankan      html  css  js  c++  java
  • 基础数据类型自动转换

      


    跳一下:

      科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤a<10,n为整数),这种记数法叫做科学记数法。当我们要标记或运算某个较大或较小且位数较多时,用科学记数法免去浪费很多空间和时间。

      科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤a<10,n为整数),这种记数法叫做科学记数法。 例如:19971400000000=1.99714×10^13。计算器或电脑表达10的幂是一般是用E或e,也就是1.99714E13=19971400000000。

      

    精确

    科学记数法的形式是由两个数的乘积组成的。表示为a×10^b(aEb)
    其中一个因数为a(1≤|a|<10),另一个因数为10^n。
     

    方便

    用科学记数法表示数时,不改变数的符号,只是改变数的书写形式而已,可以方便的表示日常生活中遇到的一些极大或极小的数   。如:光的速度大约是300,000,000米/秒;全世界人口数大约是:6,100,000,000.
    这样的数,读、写都很不方便,我们可以免去写这么多重复的0,将其表现为这样的形式:6,100,000,000=6.1×10^9,
    或:0.00001=1×10^-5,即绝对值小于1的数也可以用科学记数法表示为a乘10 的负n次方的形式。
     

    记法

    若|x|>1,则记为  的形式,  的值由  的位数决定,m为x的位数,则  , 
    若|x|<1,则  ,   ,其中m为x的位数,m₁为x的有效数位。
     

    其他的都好理解,因为自动数据类型转换都是由精度低的往精度高的转换,但是对于long和float?long占八个字节,float只占四个字节,为什么还能自动转换呢???
     
    使用小程序输出 long 和 float 数据类型的最大值和最小值;
     

    float类型能表示的数的最大值远远大于long?why?
    这里就涉及到浮点数在内存中的存储问题了。对于byte,short,int,long四个整数类型而言,它们在内存中无一例外都是直接换算成二进制存储的,所以我们可以直接计算出它们的最大值。二进制的第一位是符号位不计算入数值,拿byte来说,数据存储形式就是0000-0000,一个字节占八位,除去第一位符号位外,后边全为1的话就是0111-1111,换算成十进制答案是127。至于为什么最小的数是-128?计算机中负数是以补码形式存储的,一般说来,八位以内最小的负数应该是11111-1111,我们对其取反,结果就是1000-0000,再得到补码即1000-0001。是的,0001,补码是原码除符号位外逐位取反再加一的结果,但是对于补码而言1000-0001并不是八位二进制能表示的最小的数,最小的应该是1000-0000,对1000-0000求原码,就得到了1001-0000-0000,即我们十进制数的-128。同样的,对于short等其它整数类型也一样。

     

    那么,float类型呢?4个字节,32位,第1位是符号位(数符),即S,接下来的8位是指数域(阶码),即E,最后的23位,是小数域(尾数),即M。对于一个十进制数112.5,我们用科学计数法表示就是1.125*10^2,所以呢,对于一个二进制数,我们的表示就应该是1.XXX* 2^X,由于第一位永远都是1所以直接省去,因此表示为S.M*2^E。所以float的取值范围是-2^128到2^128,远远大于long的最大值。
    所以java中long类型自动转换为float类型。

  • 相关阅读:
    SCU 3133(博弈)
    SCU 3132(博弈)
    hdu 5183(hash)
    hdu3329(2次dfs)
    hdu5179(数位dp)
    zoj2314(有上下界的网络流)
    CF 519E(树上倍增求lca)
    hdu1251(Trie树)
    SCU 2009(数位dp)
    【Leetcode】Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/cainiaoputeng/p/11171518.html
Copyright © 2011-2022 走看看