当运算符的几个操作数类型不同时,编译器会通过一些规则来把它们转换为某种相同的类型。
1.自动转换(隐式类型转换)
如果没有进行强制类型转换,默认为自动转换。
当一个运算符的几个操作数类型不同时,自动转换的原则是将“比较窄的”操作数转换为“比较宽的”操作数,并且不丢失信息。
特例:对于赋值运算符,赋值运算符右边的值要转换成左边变量的类型,左边变量的类型即赋值表达式结果的类型。右边的“宽”操作数转换为左边的“窄”操作数时,超出的高位部分直接被丢弃。
1.1将字符类型转换为整型
C语言没有指定char类型的变量是无符号变量(signed)还是带符号变量(unsigned)。在某些机器中,char类型值的最左一位为1,而在另一些机器中char类型值的最左一位为0。字符类型转换为整型时会进行“符号位扩展”。对于有符号数,用符号位填充高位字节。对于无符号数,用0填充高位。
C语言的定义保证打印字符集中的字符总是正值。但是,存储在字符变量中的位模式在某些机器可能是负值,而在另一些机器上可能是正的。为了程序的可移植性,如果要在char类型的变量中存储非字符数据最好显示指定singned或unsigned限定符。
1.2有符号数和无符号数之间的转换
当操作数中既有无符号数又有有符号数时,无符号数将自动转换成有符号数再进行运算。
-1L<1U,这是因为unsigned int类型的1U被提升为singed long类型;而
-1L>1UL,这是因为-1L转换为unsignedlong类型时,最高位为1,是一个比较大的正数。
1.3赋值运算符的类型转换
较长的整数转换为较短的整数或char类型时,超出的高位直接被丢弃。因此,下面的程序片段
int i;
char c;
i = c;
c = i;
i的值不会有变化。(无论是否进行符号位扩展,该结论都成立)
如果上面赋值语句的次序颠倒一下:
c=i;
i=c;
如果i是一个负数(高位为1),经过上面的赋值后高位信息将丢失,i将变成一个整数。
2.强制类型转换
语法规则:(类型名)表达式
强制类型转换的规则和自动转换一样:长转短,可能丢失信息;短转长,符号位填充;
注意:强制类型转换只是生成一个指定类型的值,操作对象本身是没有什么改变的。
2.1函数参数的自动强制转换
在调用函数时,如果传入的参数和函数原型申明参数类型不一样,将进行自动强制类型转换,转换不了就报错。
PS:C语言标准库中(K&C之后的版本),没有一个函数参数是char型的。要用到char型的函数都用int代替了。所以你传入的char都会转换为int型后传入。
相关推荐
这是使用C语言链表进行的进制装换,十进制转换为八进制,通过栈的先进后出的原则,使用链表进行编写,在通过while循环输出。
C语言类型定义的简化语法图 C语言类型定义的简化语法图 C语言类型定义的简化语法图 C语言类型定义的简化语法图
C语言中float类型的实现! C语言中float类型的实现! C语言中float类型的实现! C语言中float类型的实现! C语言中float类型的实现! C语言中float类型的实现! C语言中float类型的实现! C语言中float类型的实现! ...
C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型汇总C语言基本类型...
C语言 数据类型运算符表达式 C语言 数据类型运算符表达式 C语言 数据类型运算符表达式
C语言类型转换-自动类型转换、强制类型转换、指针类型转换。 一篇文章带你快速了解!
计算机组成原理之C语言类型转换
C语言变量类型C语言变量类型
各种各样的c语言类型题目
C语言数据类型PPT课件.pptx
C语言变量类型
C语言程序设计各章节习题练习:C语言基本数据类型及运算.doc
C语言,显卡类型测试,源码 与大家分享下
C语言隐式类型转换规则。了解一下对写程序有好处,可以防止不必要的错误
C语言数据类型详解 介绍C语言中的数据类型, 符号属性, 长度属性, 基本型, 所占位数 ,取值范围, 输入符举例 ,输出符举例等内容 介绍的很详细.
1、本文详细描述了c语言类型转换。 2、通过详细示例,让读者更直观地阅读,更清晰的理解。 3、示例代码可直接复制,编译后可直接运行。 4、根据示例以及运行结果,让读者加强记忆及理解。
(完整word)PCF8591-单片机C语言程序-ADDA装换.doc
C语言数据类型及取值范围
C语言枚举类型详解C语言枚举类型详解
C语言各种类型直线的绘制 C语言各种类型直线的绘制