C语言的类型转换

语句和表达式通常应该只是用一种类型的变量和常量,如果使用混合类型,C使用一个规则集来完成自动类型转换。基本的规则

  1. 当出现在表达式中,无符号和有符号的char、short都被自动转为int;当short和int长度相同时,无符号short被转为unsigned int。K&R C 中,float还会被提升为 double;如今的C不这样了。(自动提升)
  2. 在包含两种类型的任何云算力,两个值都被转换为级别较高的类型。
  3. 类型级别从高到低依次是:long double、double、float、unisgined long long、long long、unsigned int、int。一个可能的例外是当long和int具有相同的长度时,unsinged int 比 long 的级别高。因为short和char会提升为int或unsigned int,所以清单里没有它们。
  4. 赋值语句中,计算的最后结果被转换成被赋值的那个变量的类型。可能是类型提升也可能是降级。
  5. 函数传参,char和short被转为int;float 被转为double。

类型提升一般是平滑的无损过程;降级则可能导致严重错误。浮点数降级为整数时,按照趋零截尾或舍入,25.2->25、25.9->25、-25.2->-25、-25.9->-25。

大整数转为较小的整数类型时,直接截取低位上的位,高位直接截断舍去。所以unisnged short 变char 的时候,65535截断就变成了char里的-1。

和Java不同,C语言中数值类型之间都可以直接赋值(自动类型转换(提升或降级))。数值类型和指针、数组、结构体之间不能直接赋值。需要进行类型指派(cast)。C语言的强制类型转换(也叫指派,cast),可以实现任意类型之间的转换(Java就不行)。

Java更严格,C更自由。相信程序员是C的信条之一,所以C给予程序员很大的自由,同时需要程序员承担起不滥用自由的责任。自由越大、责任重

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值