C语言 类型转化

C语言的类型转化分两种:自动类型转换、强制类型转换。

自动类型转换发生在下列三种情况下:

        1、混合运算(不同类型的数据进行运算)

              混合运算时的自动类型转换规则是:

                                               double<--<--float

                                                 

                                               long int

                                                 

                                              unsigned int

                                                 

                                                 int<--<--char、short

              上图中,横向箭头是必须进行的转换(例如两个float类型数据相加,则需要两个都先转换成double类型,然后再进行运算,结果也为double型),纵向箭头是两种不同类型的数据进行运算时需要进行的转换。在混合运算中进行的自动类型转换满足“就高原则”(级别低的类型向级别高的类型转换,箭头指向的方向级别高)。

      2、赋值运算

             在赋值运算中,编译器会自动将“=”右边的类型转换成“=”左边的类型。例如int a=4.5,则a的值为4.赋值运算中的自动类型转换其实是一种强制转换(不符合混合类型运算中的转换规则)。

      3、函数返回值的类型转换。如函数 int f1(){return 34.7;}

 

强制类型转换的形式是这样的:(新类型名)旧类型变量或常量    ,即把旧类型的变量或常量转换成新类型名类型的值。

       如 (int)23.9  结果为23

          (double)23  结果为23.000000

 

注意以下几点:1、长度比较长的类型转换成比较短的类型时,一般是将高位截去,剩下低位给长度短的类型。

              2、整型数据转换成浮点型数据时,相当于在整形数后加小数点和若干0.

              3、浮点型数据转换成整型数据时,相当于把小数部分去掉。

              4、长度短的整形转换成长度长的整形时,根据被转换类型是有符号还是无符号数,高位补足规则是不一样的。无符号数补足高位时,高位全补0.有符号数补足高位时,根据当前的符号位补足(即当前符号位是1,则高位全补1,反之亦同)。这跟逻辑右移和算术右移时高位的补齐规则有点相似。

              5、一般较低类型向较高类型转换时,计算机内部存储形式会有变化,但数值大小没有变化。而从较高级类型转换成较低级类型时,会有数据丢失。

              6、double类型转换成float类型时,需要通过截尾来实现,结尾之间要进行四舍五入操作。

              7、将unsigned类型转换成同样长度的有符号整形数时,数据的计算机内表示形式不变,数值根据不同类型对二进制码的解读规则不同而不同。(有符号数转换成相同长度的unsigned型数据时同理)

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值