C语言中强制数据类型转换的总结

上传人:宝路 文档编号:2905385 上传时间:2017-07-28 格式:DOC 页数:5 大小:25.50KB
返回 下载 相关 举报
C语言中强制数据类型转换的总结_第1页
第1页 / 共5页
C语言中强制数据类型转换的总结_第2页
第2页 / 共5页
C语言中强制数据类型转换的总结_第3页
第3页 / 共5页
C语言中强制数据类型转换的总结_第4页
第4页 / 共5页
C语言中强制数据类型转换的总结_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《C语言中强制数据类型转换的总结》由会员分享,可在线阅读,更多相关《C语言中强制数据类型转换的总结(5页珍藏版)》请在金锄头文库上搜索。

1、C 语言中强制数据类型转换的总结 字符型变量的值实质上是一个 8 位的整数值,因此取值范围一般是-128127,char 型变量也可以加修饰符 unsigned,则 unsigned char 型变量的取值范围是 0255(有些机器把 char 型当做 unsighed char 型对待, 取值范围总是 0255)。 如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示。double float 高longunsignedint char,short 低 图中横向箭头表示必须的转换,如两个 float 型数参加运算,虽然它们

2、类型相同,但仍要先转成 double 型再进行运算,结果亦为 double 型。 纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个 long 型数据与一个 int 型数据一起运算,需要先将 int 型数据转换为 long 型, 然后两者再进行运算,结果为 long 型。所有这些转换都是由系统自动进行的, 使用时你只需从中了解结果的类型即可。这些转换可以说是自动的,但然,C 语言也提供了以显式的形式强制转换类型的机制。 当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。赋值中的类型转换当赋值运算符两

3、边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。具体的转换如下:(1) 浮点型与整型 将浮点数( 单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个 0。注意:赋值时的类型转换实际上是强制的。(2) 单、双精度浮点型 由于 C 语言中的浮点值总是用双精度表示的,所以 float 型数据只是在尾部加 0 延长为 doub1e 型数据参加运算,然后直接赋值。doub1e 型数据转换为 float 型时,通过截尾数来实现,截断前要进行四舍五入操作。

4、(3) char 型与 int 型 int 型数值赋给 char 型变量时,只保留其最低 8 位,高位部分舍弃。 chr 型数值赋给 int 型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若 char 型数据值大于 127,就作为负数处理。对于使用者来讲,如果原来 char 型数据取正值,转换后仍为正值;如果原来 char 型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。 (4) int 型与 1ong 型 long 型数据赋给 int 型变量时,将低 16 位值送给 int 型变量,而将高 16 位截断舍弃。 (这里假定 int 型占两个

5、字节 )。 将 int 型数据送给 long 型变量时,其外部值保持不变,而内部形式有所改变。 (5) 无符号整数 将一个 unsigned 型数据赋给一个占据同样长度存储单元的整型变量时(如:unsignedint、unsigned longlong,unsigned shortshort) ,原值照赋,内部的存储方式不变,但外部值却可能改变。 将一个非 unsigned 整型数据赋给长度相同的 unsigned 型变量时, 内部存储形式不变,但外部表示时总是无符号的。 /*例 :赋值运算符举例 */main() unsigned a,b;int i,j;a=65535; i=-1;j=a;

6、b=i;printf(unsigned)%u(int)%dn,a,j);printf(int)%d(unsigned)%un,i,b);运行结果为:(unsigned)65535(int)-1(int)-1(unsigned)65535 计算机中数据用补码表示,int 型量最高位是符号位,为 1 时表示负值,为 0 时表示正值。如果一个无符号数的值小于 32768 则最高位为 0,赋给 int 型变量后、得到正值。如果无符号数大于等于32768,则最高位为 1, 赋给整型变量后就得到一个负整数值。反之,当一个负整数赋给 unsigned 型变量时,得到的无符号值是一个大于 32768 的值。

7、C 语言这种赋值时的类型转换形式可能会使人感到不精密和不严格,因为不管表达式的值怎样,系统都自动将其转为赋值运算符左部变量的类型。 而转变后数据可能有所不同,在不加注意时就可能带来错误。 这确实是个缺点,也遭到许多人们批评。但不应忘记的是:c 面言最初是为了替代汇编语言而设计的,所以类型变换比较随意。当然, 用强制类型转换是一个好习惯,这样,至少从程序上可以看出想干什么。 算术运算中间结果与数据类型C 语言算术表达式的计算,在计算过程中,每一步计算所得结果的数据类型由参与运算的运算对象决定,相同数据类型的两个对象运算,结果数据类型不变,不同数据类型的运算对象进行运算,结果的数据类型由高精度的运

8、算对象决定。精度的高低:doublefloatint需要注意的是,数据类型的转换是在计算过程中逐步进行的,整个表达式结果的数据类型一定与表达式中出现的精度最高的数据相同,但是具体得到数据值是逐步得到的,例如:int x=1,y=3; double k=1573.267;x / y * k这个表达式计算结果的数据类型是 double, 计算结果的答案是 0.0因为在第一步 x/y 的计算中 结果是一个整型数据 0第二步计算 0 * 1573.267 结果是一个 double 类型的数据,但数值是 0.0也就是说,算术表达式计算结果的数据类型与运算的优先级没有关系,一定具有表达式中精度最高的数据类型,但是具体得到数据结果数值,与优先级可就有关系啦。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号