22
图2.4是示意图,实际存储时指数、尾数都是二进制数,指数是2的幂,用移码表示,尾数用原码表示。详细规定请参阅IEEE 754标准。
对于float型数据的存储,这三个部分共占32位,包括1位符号位、8位指数和23位尾数;而double型数据则占64位,包括1位符号位、11位指数和52位尾数。指数部分占的位数多,则表示的数值范围大。尾数部分占的位数多,实型数据的有效数字就多,精度就高。尾数部分就是有效二进制数字,经过计算可换算成如表2.2所示的十进制有效数字位数(近似值)。
4.实型变量的舍入误差
由于实型变量是用有限的存储单元存储的,因此提供的有效数字是有限的,往往会产生误差。一方面在十进制小数转换成二进制时,如果小数最后一位不是5,则转换的二进制小数往往是无限位,此时产生舍入误差;另一方面一个很大的数和一个很小的数直接进行加或减时,可能会“丢失”小的数。
例2.3实型变量的舍入误差。
#include <stdio.h>
main()
{
float a,b;
a=123456.72e5; //a的值很大
b=a+20; //与a相比,20很小
printf("a=%f\n",a); //“%f”是输出格式符,作用是将实型数据按小数形式输出
printf("b=%f\n",b);
}
float型数据的有效数字为6位或7位,C语言只能保证有效位数内的数字正确,后面的数字是无意义的,不能准确存储(double型也是如此)。本例中,“b=a+20”是把20加在a的后几位上,是无意义的(20被丢失),即a和b的值一样。故程序运行结果如下:
a=12345671680.000000
b=12345671680.000000
2.4.3 实型常量的类型
C编译系统将实型常量当作双精度来处理。如果要指定一个实型常量为单精度型,可在其后加后缀f或F作为单精度数来处理。例如:4.5E1F、−4.5E−2F等。字符串常量的定界符是什么
2.5 字符型数据
2.5.1 字符型常量
1.字符常量
C语言中,用单引号括起来的一个字符称为字符常量。例如:'a'、'b'、'='、'+'、'?'等都是字符常量。
在内存中,每个字符常量都占用一个字节,具体存放的是该字符对应的ASCII代码值。如'a'、'A'、'1'在内存的字节中存放的分别是十进制整数97、65和49。因此在C语言中,一个字符常量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论