C语言数据类型转换
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该程序中,PI为实
型;s,r为
❖
int main()
整型。在执
行s=r*r*PI语
❖
{
句时,r和PI
❖
float PI=3.14159;
都转换成 double型计
❖
int s,r=5;
算,结果也 为double型
❖
s=r*r*PI;
。但由于s为
整型,故赋
❖
printf("s=%d\n",s);
值结果仍为
数据类型转换
❖陈孝则
A
1
发生在不同数据类型的量混合运算时,由编译系统自动完成。
1若参与运算量的类型不同,则先转换成同一类型, 然后进行运算。
2.转换按数据长度增加的方向进行,以保证精度不 降低。如int型和long型运算时,先把int量转成 long型后再进行运算。
A
2
3.所有的浮点运算都是以双精度进行的,即使仅含float单精 度量运算的表达式,也要先转换成double型,再作运算。
❖ (2) 单、双精度浮点型
❖ •由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0 延长为doub1e型数据参加运算,然后直接赋值。doub1e型数据转换为float型 时,通过截尾数来实现,截断前要进行四舍五入操作。
A
7
(3) char型与int 型
❖ •int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。 ❖ •chr型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而
整型,舍去
❖
getchar ();
了小数部分
。
❖
}
A
5
❖ 当赋值运算符两边的运算对象类型不同时,将要 发生类型转换, 转换的规则是:把赋值运算符右 侧表达式的类型转换为左侧变量的类型。
A
6
具体的转换如下:
❖ (1) 浮点型与整型
❖ •将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数 部分。将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小 数点后带若干个0。注意:赋值时的类型转换实际上是强制的。
另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于 使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型 值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同 。
❖ (4) int型与1ong 型
❖ •long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断 舍弃。(这里假定int型占两个字节)。将int型数据送给long型变量时,其外部值 保持不变,而内部形式有所改变。
4.char型和short型参与运算时,必须先转换成int型。 5.在赋值运算中,赋值号两边量的数据类型不同时,赋值号
右边量的类型将转换为左边量的类型。如果右边量的数据 类型长度比左边长时,将丢失一部分数据,这样会降低精 度,丢失的部分按四舍五入向前舍入。
ABaidu Nhomakorabea
3
❖ back 2
❖
A
4
❖
#include <stdio.h>
A
8
(5) 无符号整数
❖ •将一个unsigned 型数据赋给一个占据同样长度存储单元的整型变量 时(如:unsigned→int、unsigned long→long,unsigned short→short) , 原值照赋,内部的存储方式不变,但外部值却可能改变。
❖ •将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部 存储形式不变,但外部表示时总是无符号的。
A
10
A
11
A
9
❖ 可以利用强制类型转换运算符将一个表达式转换成所需类型: ❖ 例如: ❖ (double)a (将a转换成double类型) ❖ (int)(x+y) (将x+y的值转换成整型) ❖ (float)(5%3) (将5%3的值转换成float型) ❖ (int)(1.5+2.3) = 3
❖ 对于从高到低的强制转换,实质上就是一个截断的操作,只把低端需 要的部分保留,其余的部分直接扔掉了。