常量的类型不能从字面形式上区分(怎样确定常量的类型)

在C语言中不仅变量有类型,常量也有类型。为什么要把常量分为不同的类型呢?在程序中出现的常量是要存放在计算机中的存储单元中的。这就必须确定分配给它多少字节,按什么方式存储。例如,程序中有整数12,在Visual C 6.0中会分配给它4个字节,按补码方式存储。

怎样确定常量的类型呢?

从常量的表示形式即可判定其类型。对于字符常量很简单,只要看到由单撇号括起来的单个字符或转义字符就是字符常量。对于数值常量按以下规律。

整型常量。不带小数点的数值是整型常量,但应注意其有效范围。如在Turbo C中,系统为整型数据分配2个字节,其表值范围为-32768~32767,如果在程序中出现数值常量23456,系统把它作为int型处理,用2个字节存放。如果出现49875,由于超过32768,2个字节放不下,系统会把它作为长整型(long int)处理,分配4个字节。在Visual C 中,凡在-2147483648~2147483647之间的不带小数点的数都作为int型,分配4个字节,在此范围外的整数,而又在long long型数的范围内的整数,作为long long型处理。

在一个整数的末尾加大写字母L或小写字母l,表示它是长整型(long int)。例如123L,234l等 。但在Visual C 中由于对int和long int型数据都分配4个字节,因此没有必要用long int型。

浮点型常量。凡以小数形式或指数形式出现的实数,是浮点型常量,在内存中都以指数形式存储。如:10是整型常量,10.0是浮点型常量。那么对浮点型常量是按单精度处理还是按双精度处理呢?C编译系统把浮点型常量都按双精度处理,分配8个字节。

注意:C程序中的实型常量都是双精度浮点型常量。

如果有:float a=3.14159;在进行编译时,对float变量分配4个字节,但对于浮点型常量3.14159,则按双精度处理,分配8个字节。编译系统会发出“警告”(waring:truncation from 'const double'to 'float')。意为“把一个双精度常量转换为float型”,提醒用户注意这种转换可能损失精度。这样的“警告”一般不会影响程序运行结果的正确性,但会影响程序运行结果的精确度。如果对精确度要求不是很高,可以容忍这样的“警告”,使程序接着进行连接和运行。

可以在常量的末尾加专用字符,强制指定常量的类型。如在3.14159后面加字母F或f,就表示是float型常量,分配4分字节。如果在实型常量后面加大写或小写L,指定此常量为long double类型,如:

float a=3.14159f; //把此3.14159按单精度浮点常量处理,编译时不出现“警告”。 long double a=1.23L; //把此1.23作为long double处理

要注意区分类型和变量,每一个变量都属于一个确定的类型。类型是变量的一个重要属性。变量是占用存储单元的,是具体存在的实体,在其占用存储单元中可以存放数据。而类型是变量的共性,是抽象的,不占用存储单元,不能用来存放数据。

搜索微信公众号【balayihuier】或扫描下方二维码关注微信公众号,资深软件工程师带你手把手撸代码,从此走上人生巅峰,迎娶白富美!

常量的类型不能从字面形式上区分(怎样确定常量的类型)(1)

公众号《吧啦一会儿》,手把手带你撸代码

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页