基本类型的赋值、转换问题

来源:互联网 发布:jquery数据交互 编辑:程序博客网 时间:2024/05/22 00:17
基本类型的赋值、转换问题


(1) c中是不是也和Java一样,存在隐式转换和强制转换?有区别吗?
有区别。
C中的隐式转换就是“整型提升”。C中的“整型提升”仅指:表达式中的操作数类型<=int的情况下(short和char),提升到int型。
(注意:是表达式中的char和short在使用之前被转换为int。)


>=int型的类型的提升,被称为寻常算术转换:
寻常转换应该遵循:int – unsigned int – long int – unsigned long int – float – double – long double由小到大的转换规则:一个操作数类型相对另一个操作数类型排名较低(较小),则自动转换为相对较大的类型。(数据转换按数据存储长度增长的方向进行。)


寻常算术转换和强制转换均为“算术转换”。寻常算术转换侧重于自动转换到相对较高的类型(如int - float),强制转换则可人为将其转换到其他类型(如long – int ; int - double)。


(记住:是先转换,再执行操作。)
(记住:若某个操作符的各个操作数属于不同的类型,则除非其中一个操作数转换为另一个操作数类型,否则操作无法进行。问:该规则是否也针对赋值操作符“=”?不过等号右边的操作数(右值)自动转换成了左值的类型。)
(注意:以上概念是针对算术操作符而言的。算术操作符就是+ - * / %。
         问:那对于其它操作符呢?尤其是关系操作符?)


(2) 不同类型操作数互相赋值时的精度变化情况:
从int到float : 精度可能会降低(有点例外)。Float只能保证6位有效数字的精度(浮点型以指数方式存储),虽然长度为4个字节。
    在32位平台上,通常int是4字节长度,最多表示到21亿多,而int型是“绝对精确”的,换句话说,就是int行最多可以保证10位十进制有效数字的精确度。而float只能保证6位有效数字的精确度,因此int到float的转换是可能丢失精度的。
    比如整数“1234567899”转换成float后,大约是:1.23457936乘10的9次方,也就是从第7位有效数字开始已经不准确了。double可以保证15位10进制有效数字的精度,所以从int到double不会有这个警告。
(以上摘录自网络。)


(3) 左值与右值的注意点?
  左值可以是变量或表达式,但必须能标识一个可以存储结果值的地点。