在C语言里,一切表达式都有值;字面值,形如“21
”,“88.3F
”等,是字面形式输入到源代码的值。
有值就需要存放值的空间,空间的大小可以通过sizeof()
操作符来获取。如printf("%zd", sizeof(21))
。
值需要占据多少空间,取决于值的类型。变量的类型可以通过声明变量时标识符前的类型修饰符来指定,而字面值的类型则由编译器通过字面值的形式来判断。如“21
”是Int类型的字面值,而“21L
”则是Long类型的字面值。对于一个浮点数而言,默认的字面值类型是Double类型而不是Float类型,这是为了保证浮点数的精度。
如果赋值语句的右操作数是一个字面值,可能会牵扯到类型转换的问题。比如下面的例子,float num = 21.2;
。21.2在计算机内部的二进制系统中不能被精确地表示,这导致编译器默认21.2的类型为Double类型,而把一个Double类型的字面值通过赋值语句赋给一个Float类型的变量,会引起浮点数精度的丢失。因此,编译器通常会对这一类语句提出警告。要避免这个问题,在开始时要将字面值指定为Float类型,float num = 21.2F
。
[文] Lightyears