数据类型转换一般遵循少量的原则,一般来说,自动转换是将“窄”操作数转换成“宽”操作数,以至于不会丢失信息。把长类型的数据复制给短类型时会发生数据丢失。这可能会产生警告,但是是合法的。
机器字符集中的字符按照ASCII码表示都是正数,但是任意的位形式存放在字符变量中可能会是负的,这个根据机器决定。为了易用性,当需要存放一些非字符的数据在字符类型中时,需要定义该char变量是signed还是unsigned。
需要注意的是,float不会自动转化为double类型,这是和原始的定义的一个改变,在数学运算的库中,都会使用double精度,而用float的主要原因是在大的数组中保存数据,少部分原因是减少机器时间,因为double精度非常耗时。
当涉及到unsigned操作数时,情况会变得比较复杂。
在赋值的时候也会发生类型转换,右边的值会被转化成左边的类型,这个也是整个结果的类型。long转化为short或者char时,会丢掉超过的位;float转化为int会丢掉小数部分。
在函数调用参数传递是也会发生类型转换,通常是自动转换。
明确地转换时通过强制转换符强制转换(cast),注意在强制转换的时候,是在原数的基础上产生一个新的值,原数并没有改变。