C语言视频 VS2015:[13]类型自动转换

2026-04-01 15:03:22

1、无边眠论是前面讲的算术运算符,还将后面要讲解的关系运算符,对于这些二目运算符,在进行开发的过程中,经常会遇到不同类型的操作数混合运算的情况,那么对于这些不同类型的操作数进行混合运算,编译器是如何处理这些不同的类型的呢?

注:二目运算符主要是真需要两个操作数的运算符,如加法,需要两个加数才能够进行,减法也需要两个加数才能够进行等;

2、在C语言里面,隐式类型转换具有以下的原则:

① 当操作数中有一个是long doule类型的时候,另一个操作数将被转换成long double类型;

② 如果上面的条件没有成立,当操作数中一个是double类型的时候,另一个操作数将被转换成double类型;

③ 如果上面两个条件都没有成立,当操作数中一个是float类型的时候,另一个操作数将被转换成float类型;

④ 如果上面的三个条件都没有成立,那么整数类型的转换将遵循下面的原则:

a. 当操作数中一个是unsigned long long 类型的时候,另一个操作数将被转换成unsigned long long类型;

b. 如果上面的条件没有成立,如果一英诸个操作数是long long,另一个操作数将被转换成long long类型;

c. 如果上面的2个条件没有成立,如果一个随陕劣操作数是unsigned long,另一个操作数将被转换成unsigned long类型;

d. 如果上面的3个条件没有成立,如果一个操作数是long,另一个操作数是 unsigned int类型,所有的操作数都将被转换成 unsigned long;

e. 如果上面的4个条件没有成立,如果一个操作数是long,另一个操作数将被转换成long类型;

f. 如果上面的5个条件没有成立,如果一个操作数是unsigned int,另一个操作数将被转换成unsigned int类型;

g.如果上面的条件都不成立,所有的操作数都将被转换成 int 类型;

C语言视频 VS2015:[13]类型自动转换

3、总结一下便是:

① 当操作数中一个是“整数”,另一个是“小数”时,整数将转换成小数;

② 操作数中位数低于int类型的位数的,操作数将都被转换成int类型;

③ 当操作数中出现“类型位数少的”和“类型位数多的”时,类型位数少的将转换成类型位数多的,

④ 当操作数中出现“有符号类型”和“无符号类型”时,有“符号的类型”将被转换成“无符号类型”;

1、“小数”与“小数”运算的情况:

注:为了证明上述的类型转换是成立的,我们需要利用系统的警告来告诉我们答案,所以例子的结果都采用char类型来接收,以便系统可以产生警告;

通过对比源码和警告信息,我们可以发现:

① long double 类型 和 double 类型 运算,结果转换成了long double;

② long double 类型 和 float 类型 运算,结果转换成了long double;

③ double 类型 和 float类型 运算,结果转换成了double;

转换符合C语言里面的隐式类型转换原则;

C语言视频 VS2015:[13]类型自动转换

2、"整数"与“整数”运算的情况:

通过警告信息,我们发现发现:

前 5 转换符合了C语言里面的类型自动转换原则,

但是后面的 5 个似乎并不符合C语言的类型自动转换原则?

这主要是由于C语言里面,int 和 unsigned int 类型的特殊性导致的,int 和 unsigned int 类型,在C语言里面可以自由的转换成任意类型,而不会产生警告信息导致的?那后面的五种情况如何证明呢?

C语言视频 VS2015:[13]类型自动转换

3、int 或 unsigned int 类型虽然可以自由转换成其他的数据类型,但是并能够随便的转换成指针类型,所以修改下面的和的类型为指针类型,编译后,警告出来了:

通过警告信息,我们发现发现:

后 5 转换符合了C语言里面的隐式类型转换原则,

C语言视频 VS2015:[13]类型自动转换

4、“整数”和“小数”的情况:

通过警告信息,我们发现发现:

所有的转换符合了C语言里面的隐式类型转换原则,

C语言视频 VS2015:[13]类型自动转换

1、其实在“隐式类型转换举证”部分我们就已经知道了,int类型在c语言里面具有其特殊性,int类型转换原则:

int 或 unsigned int 类型可以隐式的转换成其他的整数类型,而不会产生警告;

具体的例子如下所示:

C语言视频 VS2015:[13]类型自动转换

C语言视频 VS2015:[13]类型自动转换

2、有了上面的例子,我们就可以理解了为什么整数初始化的时候,不带后缀而不会产生警告了,如:

char 类型的后缀是 i8,short 类型的后缀是 i16,等,具体的可以看:

http://jingyan.baidu.com/article/fedf07375bb95c35ad89777c.html

C语言视频 VS2015:[13]类型自动转换

C语言视频 VS2015:[13]类型自动转换

3、这是由于系统的整数的默认类型就是 int 类型,具体的如下图警告所示:

C语言视频 VS2015:[13]类型自动转换

1、显示转换又称为强制类型转换,操作比较的直接,直接在需要转换的操作数前面加上“(目标类型)”,就可以进行,但是需要注意的是不同类型的转换

C语言视频 VS2015:[13]类型自动转换

2、通过错误窗口可以观察到:

① 没有加强制类型转换的第5行,产生了警告,

② 加了强制类型转换“(int)”后的第6行,没有产生警告;

3、通过监视窗口可以观察到:

类型转换后,int类型只保留了double类型的整数部分,小数部分都被截断掉了

4、        方便他人亦是方便自己,如果觉得还行就点下下边投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

C语言视频 VS2015:[13]类型自动转换

猜你喜欢