Wangyt

导航

两大基本数据类型 - 整数类型 / 浮点数类型

一、整数与浮点数之间的区别

   两者的存储方式不一样,整数是直接以二进制形式进行存储,对于浮点数,需要将小数部分和指数部分分开存储。两者之间的区别还有如下:

  1-整数没有小数部分,浮点数有小数部分;

  2-浮点数可以表示的范围比整数大;

  3-对于一些算术运算(两个很大的数相减),浮点数损失的精度更多;

  4-在任何区间内都存在着无数个实数,所以计算机的浮点数不能表示区间内的所有值,通常只是实际值的近似值;

  5-过去,浮点运算比整数运算慢,不过,有了浮点处理器,速度上的差距有了一定的缩小。

二、整数

   int类型是有符号整型,可以是正整数、负整数或零。其取值范围依计算机系统而异。一般而言,存储一个int数据需要占用一个机器字长,正负号会占用其中一位。处理器的机器字长越长,int的范围越大。ISO C 规定。int的取值范围最小为-32768~32767。

   八进制、十进制、十六进制int型数据的显示:%o - 八进制,%d - 十进制,%x - 十六进制。如果是需要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#oX。

   占用存储空间:short <= int < long < long long。【个人PC上常见的设置:long long - 64bit,long - 32bit, int - 16bit/32bit, short - 16bit。】【C 标准对基本数据类型之规定的允许的最小大小】

  short、long、long long 和 unsigned 类型数据的打印:%u - unsigned int;%ld - long int;%lo、%lx形式将long型数据以八进制、十六进制打印;对于short类型,使用 h 前缀,%hd,%ho等都是有效的;l 和 h 前缀都可以和 u 一块使用。【在使用printf()函数进行打印的时候,确保转换说明的类型与待打印值的类型相匹配,否则,会有意想不到的错误】

  对于short型数据,不管是以%hd形式进行打印还是以%d形式进行打印,结果都是一样的。【原因:在给函数传递参数时,C 编译器会把 short 类型的数据自动转换成 int。1 - 转换的原因为 int 类型被认为是计算机处理整数类型时最高效的类型,在short 和 int 类型的大小不同的计算机中,用 int 类型的参数传递熟读更快;2 - 使用 h 修饰符可以显示较大整数被截断成 short 类型值的情况。】

三、浮点数

  1、float、double、long double

  C 标准规定,float 类型必须至少能表示6位有效数字,且取值范围至少是10^(-37) ~ 10^(+37)。通常,系统存储一个 float 类型的数据需要占用32位,其中8位用于表示指数的值和符号,剩下24位用于表示非指数部分(也叫做尾数或有效数)及其符号。

  double 类型和 float 类型的最小值范围相同,但至少能必须表示10位有效数字。一般情况下,double 类型的数据占用64位而不是32位,一些系统将多出的32位全部用来表示非指数部分,这种做法不仅增加了有效数字的位数(提高精度),还减少了舍入误差,还有一些系统会把其中的一些位分配给指数部分,以容纳更大的指数,增加可表示数的范围。无论如何,实际情况中 double 类型的数据至少有13位有效数字,超过最低标准。

  2、浮点型常量

  浮点型常量的基本形式:有符号的数据(包括小数点)+ e / E  + 有符号数表示10的指数。【e.g.:-1.56E+12,2.87e-3等】

  简写形式:‘ + ’可以省略;可以没有小数点【e.g. 2E5】或指数部分【e.g. 19.28】,但是二者不能同时省略;可以省略小数部分【e.g. 3.E16】或整数部分【e.g. .45E-6】,但是二者不能同时省略.除了上述的简写形式,以下几种简写形式也是有效的【3.14159、.2、4e16、.8E-5、100.0等】。【不要在浮点型常量中间加空格!!!】

  3、浮点数的使用

  float some = 1.0 * 2.0;

  默认情况下,编译器假定浮点型常量是double类型的精度。对于上述表达式的处理,4.0和2.0会被存储为64位的double类型,使用双精度进行乘法运算,然后将乘积截断成float类型的宽度。虽然说这种计算方式得出来结果精度更高,但是会减慢程序的运行速度。

  在浮点数后边加上 f / F 后缀可覆盖默认设置,编译器会将浮点数常量看作是 float 类型;使用 l / L 后缀使得数字成为long double 类型;没有后缀的浮点型常量是 double 类型。

  4、浮点数的打印

  %f - 打印十进制计数法的 float 和 double 类型浮点数【 %Lf 等亦可】;

  %e - 打印指数计数法的浮点数【 %Le 等亦可】;

  %a - 打印十六进制的浮点数(前提是系统支持)【 %La 等亦可】。

  5、浮点值的上溢和下溢

  上溢(overflow):数字过大,超过当前类型能表达的范围。

  下溢(underflow):当前类型数据的全精度被损失。

 

 

 

 

  

   

 

posted on 2019-05-27 11:39  Wangyt  阅读(9257)  评论(0编辑  收藏  举报