c语言隐式转换编程,C语言学习大纲--隐式转换

专题三:隐式转换

1.     表达式

一个表达式中,往往会有不同类型的数据做运算,那么级别低的类型会默认转换为级别高的类型,然后做运算

double  

^

long

^

int

^

char

在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型如:

(1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行算。

(2)若运算数中最长的类型为long型.则其他类型数均转换成long型数。

(3)若运算数中最长类型为int型,则char型也转换成int型进行运算。算术转换是在运算过程中自动完成的。

特别注意的是有符号和无符号之间的转换:

(1).包含long与unsigned int,32位机器上都是4字节,所以均转换为unsigned long.

(2).包含signed与unsigned int,signed会转换为unsigned。如果int恰好为负数,其结果为对unsigned取值个数求模的结果。比如将-1赋给8位的unsigned char,呢么结果就是255(-1对256取模后的值)。unsigned char取值范围0~255。

2.     赋值语句

进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。

3.     函数传参

函数在传参的过程中,实参默认会转换为形参类型,如果实参类型长度大于形参长度,则要进行截断或舍入操作

4.     函数返回值

函数在返回值的过程中,return后面的数据类型会默认转换为函数名前面指定的类型,如果前者长度大于后者长度,则要进行截断或舍入操作

讨论:

unsigned char a = 0xa5;

unsigned char b = ~a >> 1 + 2 +3;

printf("%d\n", b)的结果是多少?

int a = 10;

printf("%d %d\n", sizeof(a=10.0), sizeof(a+10.0));的结果是多少?

1>0 ? 1:"1";这条语句正确吗?为什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值