c语言中实型标准,C语言中的基本数据类型--实型数据

更新时间:2023-07-13 00:49:25 阅读: 评论:0

c语⾔中实型标准,C语⾔中的基本数据类型--实型数据
C语⾔⾥⾯关于double类型的打印:%lf , %le , %lE
e/E是指数形式的,不过e打印的是⼩写,E打印的是⼤写。
g/G会截断⼀些⼩数,⽐较不精确。
%e    double  Signed  value  having  the  form  [  –  ]d.dddd  e  [sign]ddd  where  d  is  a  single  decimal  digit,  dddd  is  one  or  more  decimal  digits,  ddd  is  exactly  three  decimal  digits,  and  sign  is  +  or  –.
%E  double  Identical  to  the  e  format  except  that  E  rather  than  e  introduces  the  exponent.
%f  double  Signed  value  having  the  form  [  –  ]dddd.dddd,  where  dddd  is  one  or  more  decimal  digits.  The  number  of  digits  before  the  decimal  point  depends  on  the  magnitude  of  the  number,  and  the  number  of  digits  after  the  decimal  point  depends  on  the  requested  precision.
彼得与狼交响童话%g  double  Signed  value  printed  in  f  or  e  format,  whichever  is  more  compact  for  the  given  value  and  precision.  The  e  format  is  ud  only  when  the  exponent  of  the  value  is  less  than 
–4  or  greater  than  or  equal  to  the  precision  argument.  Trailing  zeros  are  truncated,  and  the  decimal  point  appears  only  if  one  or  more  digits  follow  it.
%G  double  Identical  to  the  g  format,  except  that  E,  rather  than  e,  introduces  the  exponent  (where  appropriate).
⼀、实型常量
实型也称为浮点型,实型常量也称为实数或浮点数。
1.在纯C中,实型常量只能⽤⼗进制表⽰,但是有两种形式。
(1)⼗进制⼩数形式:由数字0-9以及⼩数点构成,其中,⼩数点是必不可少的,如356.0、12.2等都是合法实数,65不是合法实数,因为缺少了⼩数点。
(2)指数形式:由⼗进制数加阶码标志“E/e”组成,⼀般形式为a E n,其中a为⼗进制整数,E为阶码标志,n为⼗进制整数作为阶码,如123E5表⽰123*10^5,使⽤指数形式时,要注意E之前必须有数字,之后的阶码必须为整数。和数学中的科学计数法不同,⼀个实数可以有多种指数形式,如123.789可以表⽰为1.23789E2或12.3789E1或0.123789E3这些都是合法的,但是只有第⼀种才是规范化的指数形式,程序唉输出结果时都是以该种形式输出,但是其他形式在使⽤是也没有任何错误。
2.在纯C中,也可以使⽤后缀“F/f”来声明⼀个数是浮点数,如365F和365.0是等价的。
3.实例程序
main()
{
printf("%f\n",365.0);
printf("%f\n",365);
printf("%f\n",365F);
}
运⾏结果是
365.000000
0.000000
365.000000
第⼆⾏输出错误的原因是,由于在使⽤时没有加⼊⼩数点,也没有使⽤后缀F将其声明为浮点数,所以365不是合法实数,不被编译器认可。
⼆、实型变量
1.实型数据在内存中的存放形式:实型数据在内存中被分为符号部分,⼩数部分和指数部分三部分存放,例如-1.23456在内存中被分
为“-”、“.123456”、“1”三个部分,⼀个实型数据占⽤4个字节的内存空间(1byte=8bits)通常,⼀般的C语⾔编译器会占⽤24位存放⼩数,8位存放指数,事实上,电脑在存取⼩数部分时,是以⼆进制形式的,⽽指数部分则是以2的幂指数形式存放的。
2.实型数据的⼩数位数越多,代表有效数字越多,精度也就越⾼,⽽指数位数越多,器表⽰的数的范围就越⼤。
3.实型变量的分类:实型变量可以分为三类,
(1)单精度型:占⽤4字节内存空间,数值范围为3.4E-38到3.4E+38,有效数字为七位。
(2)双精度型:占⽤8字节内存空间,数值范围为1.7E-308到1.7E+308,有效数字为⼗六位。
(3)长双精度型:只是知道有这种数据类型,不过没有具体的数据,那位⾼⼈知道的话请补充⼀下。
4.实型变量的定义格式和规则与整型数据相同,所以每⼀个实型数据在使⽤前必须先定义。
实例:师任堂
float m,n;        /*定义m,n为单精度实型变量*/
double a,b,c;    /*定义a,b,c为双精度实型变量*/
实例2:鸡肉馅饺子
main()
{
float a;
double b;
坏学生a=5555.55555;
b=5555.5555555555;
printf("%f\n%f\n",a,b);
}
运⾏结果为5555.555664猪肉白菜馅饼
5555.555556
分析:变量a被定义为float,变量b被定义为double,所以a的有效数字为七位,所以输出时5555.555之后的数字是⽆效的,⽽b的有效数字虽然为⼗六位,但是由于具体编译器的限制,只运算到⼩数点后六位,其余位数四舍五⼊。
P.s编程技巧:对于实型数据,由于精度差别,⼤⼩差异极⼤的数值直接进⾏运算可能会丢失⼀部分数据。
王安忆三、puzzle from:
float c = 12.5;printf("%d\n", c);printf("%d\n", *(int *)&c);
重装系统步骤
参考答案:该项程序输出如下所⽰,010********原因是:浮点数是4个字节,12.5f 转成⼆进制是:01000001010010000000000000000000,⼗六进制是:0×41480000,⼗进制是:1095237632。这是第⼆个输出的原因。对于第⼀个,为什么会输出0,我们需要了解⼀下float和double的内存布局,如下:float: 1位符号位(s)、8位指数(e),23位尾数(m,共32位)
谦让的反义词
double: 1位符号位(s)、11位指数(e),52位尾数(m,共64位)
然后,我们还需要了解⼀下printf由于类型不匹配,所以,会把float直接转成double,注意,12.5的float和double的内存⼆进制完全不⼀样。别忘了在x86芯⽚下使⽤是的反字节序,⾼位字节和低位字位要反过来。所以:float版:0×41480000 (在内存中是:00 00 48 41)
double版:0×4029000000000000 (在内存中是:00 00 00 00 00 00 29 40)
⽽我们的%d要求是⼀个4字节的int,对于double的内存布局,我们可以看到前四个字节是00,所以输出⾃然是0了。
这个⽰例向我们说明printf并不是类型安全的,这就是为什么C++要引如cout的原因了。

本文发布于:2023-07-13 00:49:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1079146.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实型   形式   部分   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图