快速业务通道

C 算术类型转换

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-07

这里左边的都默认是signed 的.比如int = signed int.(代码中也是,没有写signed的都是默认是有符号的)

然后还有个等价的关系是 long = long int .这些缩写在代码里都是潜规则了.要记下.

这个转换关系图叫做“普通算术类型转换图”.就是在一个算术表达式中所遵循的类型转换关系.只要算术表达式中有任何一个更“高级”一点的类型,则其他操作数都转换成这种类型再参加运算.下面是例子.

Empire CMS,phome.net

int a;

float b;

a b 的结果是float 类型的值.

这个应该比较好理解.

int a = 3 / 2; /* 则结果a的值为1 */

这三个操作数都是int类型.则结果采用

Empire CMS,phome.net
"舍去取整法".将整数后面的余数都舍去.

float a = 3/2 ; /*结果a任然是1 */

上面的这个表达式是由两个表达式组合而成的. (a = ( 3/ 2 )) 里面的括号是第一个表达式.结果在赋值给a构成第二个表达式.分开写就是

temp = 3/2;

float a = temp;

Empire CMS,phome.net

而这个temp是我们假设的一个变量,他的类型可以当做随意的,不参与到类型转换中来,而由等号右边的表达式决定.这样由前一个例子可以知道,temp =1.从而可以知道a = 1.

还有就是.这个图不是完全正确的一张图,只是方便记忆的一张图.

特例是:

1)整形提升:就是 charshort类型在参加算术运算是都会转换成整形.

Empire CMS,phome.net
比如 char a,b. a b 的类型为int .

2)上面所举得的例子都是针对singed的.而对于singnedunsigned.之间不是图上说的都转换到下面的高级的类型.具体的这有c标准原文.

1.如果其中一个操作数的类型是long double,那么另一个操作数也被转换为long double.

Empire CMS,phome.net

2.如果以上条件没有满足并且其中一个操作数的类型是double,那么另一个操作数也被转换为double.
3. 如果以上条件没有满足并且其中一个操作数的类型是float,那么另一个操作数也被转换为float.
Empire CMS,phome.net

(d) 如果以上条件没有满足并且其中一个操作数的类型是unsigned int, 那么另一个操作数也被转换为unsigned int.
(e)如果以上条件没有满足,那么两个操作数都被换转为int.

我认为可以这样来记.如果只是同等级别的.则以unsigned结果.

Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号