C语言数据类型的一些问题。

const float pi = 3.14159f
pi已经被定义为单精度浮点数了,那么数字后面加f的作用是什么?
又比如:long int pi = 123L
pi已经被定义为长整形了,数字后加L又有什么必要?
双比如:short int pi = 123L
pi是短整形,数字加L,可接受数字的变量属于短整形,那L不是白加?

是这样的:
在你写变量定义并且给出初始值时,编译程序会收集这些初始值存放在一个特定的位置,以后程序加载运行时,首先开设变量,然后会从这个特定位置读取数据为这些变量赋值。
当你写3.14159f时,指定这个数据是单精度浮点数,那么系统会自动在特定区存放一个单精度的浮点数;但你写3.14159时,这个数据默认是双精度的有可能被存放成双精度的(要看编译器情况),然后系统在赋给变量初始值时还要做一个双精度到单精度的强制数据类型转换。
同理123会占用整型数据长度存放,123L保证这个整数存放成长型数据、占用long int对应的字节数。追问

你好。写3.14159默认是双精度,3.1呢?10.0呢?是不是只要是小数,就会被当做双精度?为了让电脑第一时间当做单精度所以加f?

追答

没错,否则写3.1f,10.0f

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-10
1、对于const float pi = 3.14159f;,字面常量3.14159被编译器认为是double类型,而3.14159f被认为是float类型字面常量,不加f会被警告的。意思是,高精度数转换到低精度数时,会产生误差。
2、而对于long int pi = 123L;,不加L或l不会被警告,编译器会自动升格int型到long int型。低级别数转换到高级别时,不存在溢出等问题。
3、对于short int pi = 123L;,后面的L纯属多此一举,闲的没事的人才会玩这种无聊的游戏。
第2个回答  2014-03-10
总结一下: 3.14159 常数默认为 double 类型, 就像 1 默认为 int 类型一样, 从 double 向 float 转换注意会有告警, 低精度转换会丢数据,加上个 'f' 就是告诉编译器这个常数是 float 类型的。同理加L也是为显式指定数字字面量的类型。short int pi=123L,确实和123的效果是一样的
相似回答