【C语言】类型转换注意点

隐式转换原则

隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:
在这里插入图片描述
常用的算术转换不适用于赋值运算符、逻辑运算符 && 和 ||。

强制转换

强制类型转换是把变量从一种类型转换为另一种数据类型。

#include <stdio.h>


int main()
{
    int i1 =  20, i2 = 7;
    float f;
    f = (float)i1 / i2;
    printf("%G\n", f);
}

这里把i1强制为float类型,因为强制转换比除法优先级高,所以先执行强制转换。

类型转换注意点

  1. 整数提升
    如果int能够表示原始类型中的所有数值,那么这个数值就被转成int型,否则,它被转成unsigned int型。这种规则被称为整型提升。所有其它类型都不会被整型提升改变。"
    char/uchar,short/ushort都可以被int表示。所以当它们做算术运算时,都会被提升成int类型。
    为什么会整数提升?
    因为对于int类型数据作运算时,CPU运算速度是最快的,所以C语言会对数据作整数提升的处理,使得程序的运行速度尽可能地快。
  2. 有符号转换为无符号
    C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算。也就是说,int/long和对应类型的unsigned int/unsigned int进行运算时,有符号数会自动转换为对应类型的无符号数。
    注意:这种转换规则不适用于char/uchar,short/ushort类型,因为这些类型会存在整数提升
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值