详解C语言中不同类型的数据转换规则
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
详解C语⾔中不同类型的数据转换规则
不同类型数据间的混合运算与类型转换
1.⾃动类型转换
在C语⾔中,⾃动类型转换遵循以下规则:
①若参与运算量的类型不同,则先转换成同⼀类型,然后进⾏运算
②转换按数据长度增加的⽅向进⾏,以保证精度不降低。
如int型和long型运算时,先把int量转成long型后再进⾏运算
a、若两种类型的字节数不同,转换成字节数⾼的类型
b、若两种类型的字节数相同,且⼀种有符号,⼀种⽆符号,则转换成⽆符号类型
③所有的浮点运算都是以双精度进⾏的,即使是两个float单精度量运算的表达式,也要先转换成double型,再作运算.
④char型和short型参与运算时,必须先转换成int型
⑤在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。
如果右边量的数据类型长度⽐左边长时,将丢失⼀部分数据,这样会降低精度,丢失的部分按四舍五⼊向前舍⼊, 更正:此处在博友反馈后,代码VS和Linux下实测丢失部分是直接舍去,⽽不是四舍五⼊;
2.强制类型转换
强制类型转换⼀般格式如下:
(类型名)(表达式)
这种强制类型转换操作并不改变操作数本⾝
⾸先进⾏⼀个实验,分别定义⼀个signed int型数据和unsigned int型数据,然后进⾏⼤⼩⽐较:
unsigned int a = 20signed int b = -130b?还是b>a?实验证明b>a,也就是说-130>20,为什么会出现这样的结果
呢?
这是因为在C语⾔操作中,如果遇到⽆符号数与有符号数之间的操作,编译器会⾃动转化为⽆符号数来进⾏处理,因此a=20,b=4294967166,这样⽐较下去当然b>a了。
unsigned int a=20signed int b=-130;a + b结果输出为4294967186,同样的道理,在运算之前,a=20,b被转化为4294967166,所以a+b=4294967186
减法和乘法的运算结果类似。
uint i=3;i * -1;问结果是多少
到此这篇关于详解C语⾔中不同类型的数据转换规则的⽂章就介绍到这了,更多相关C语⾔数据转换内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。