C语言类型强制转换.docx

上传人:小飞机 文档编号:3155303 上传时间:2023-03-11 格式:DOCX 页数:5 大小:39.13KB
返回 下载 相关 举报
C语言类型强制转换.docx_第1页
第1页 / 共5页
C语言类型强制转换.docx_第2页
第2页 / 共5页
C语言类型强制转换.docx_第3页
第3页 / 共5页
C语言类型强制转换.docx_第4页
第4页 / 共5页
C语言类型强制转换.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《C语言类型强制转换.docx》由会员分享,可在线阅读,更多相关《C语言类型强制转换.docx(5页珍藏版)》请在三一办公上搜索。

1、C语言类型强制转换C语言类型强制转换 本篇主要介绍 C语言类型强制转换。 强制类型转换是通过类型转换运算来实现的。其一般形式为:其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。例如: (float) a 把a转换为实型(int)(x+y) 把x+y的结果转换为整型在使用强制转换时应注意以下问题: 1.类型说明符和表达式都必须加括号,如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。 2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的

2、临时性转换,而不改变数据说明时对该变量定义的类型。 例1: main float f=5.75; printf(int)f=%d,f=%fn,(int)f,f); f-5.75 将float f强制转换成int f float f=5.75;printf(int)f=%d,f=%fn,(int)f,f); 本例表明,f虽强制转为int型,但只在运算中起作用, 是临时的,而f本身的类型并不改变。因此,(int)f的值为 5(删去了小数)而f的值仍为5.75。 例2:比如我们可以(int)A,这样转换后的结果为A的ASCII码数值,因为那块内存本来就存的那个数,只是换个形式使用而已。 知道上面的原

3、则,我们可以对任何数据类型进行转换,但是转换的结果可能不是你想像的结果,举例(int)9的结果为多少?不是9而是0x39。来个高深点的printf(%d,12);的输出是什么?正确答案是12594,因为printf(%d,12),打印的是存储12的内存地址上的内容,即ASCII码值2存储在低位,1储在高位地址,0x32就是2的ASCII码,0x31就是1的ASCII码,所以是0x3132,转换成10进制就是12594! 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0255

4、。 如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示。 double float 高类型 long unsigned int char,short 低类型 横向箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转成double型再进行运算,结果亦为double型。 纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型, 然后两者再进行运算,结果为long型。所有这些转换都是由系统自动进行的, 使用时你只需从中了

5、解结果的类型即可。这些转换可以说是自动的,但然,C语言也提供了以显式的形式强制转换类型的机制。 当较低类型的数据转换为较高类型时,一般只是形式上有所改变,而不影响数据的实 质内容;而较高类型的数据转换为较低类型时,有可能导致数据丢失。 赋值中的类型转换 当赋值运算符两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。具体的转换如下: (1) 浮点型与整型 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上

6、是强制的。 (2) 单、双精度浮点型 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。doub1e型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。 (3) char型与int型 int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。 char型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保

7、持原值,只是数据的内部表示形式有所不同。 (4) int型与long型 long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)。 int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。 (5) 无符号整数 将一个unsigned型数据赋给一个占据同样长度存储单元的整型变量时(如:unsignedint、unsigned longlong,unsigned shortshort) ,原值照赋,内部的存储方式不变,但外部值却可能改变。 将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储

8、形式不变,但外部表示时总是无符号的。 /*例:赋值运算符举例 */ main unsigned a,b; int i,j; a=65535; i=-1; j=a; b=i; printf(unsigned)%u(int)%dn,a,j); printf(int)%d(unsigned)%dn,i,b); 运行结果为:(unsigned)65535(int)65535 (int)-1(unsigned)-1 计算机中数据用补码表示,int型量最高位是符号位,为1时表示负值,为0时表示正值。如果一个无符号数的值小于32768则最高位为0,赋给 int型变量后、得到正值。如果无符号数大于等于32768,则最高位为1, 赋给整型变量后就得到一个负整数值。反之,当一个负整数赋给unsigned 型变量时,得到的无符号值是一个大于32768的值。 C语言这种赋值时的类型转换形式可能会使人感到不精密和不严格,因为不管表达式的值怎样,系统都自动将其转为赋值运算符左部变量的类型。 而转变后数据可能有所不同,在不加注意时就可能带来错误。 这确实是个缺点,也遭到许多人们批评。但不应忘记的是:c面言最初是为了替代汇编语言而设计的,所以类型变换比较随意。当然, 用强制类型转换是一个好习惯,这样,至少从程序上可以看出想干什么。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号