C 算术类型转换
这里左边的都默认是signed 的.比如int = signed int.(代码中也是,没有写signed的都是默认是有符号的) 然后还有个等价的关系是 long = long int .这些缩写在代码里都是潜规则了.要记下. 这个转换关系图叫做“普通算术类型转换图”.就是在一个算术表达式中所遵循的类型转换关系.只要算术表达式中有任何一个更“高级”一点的类型,则其他操作数都转换成这种类型再参加运算.下面是例子.
int a; float b; 则a b 的结果是float 类型的值. 这个应该比较好理解. int a = 3 / 2; /* 则结果a的值为1 */ 这三个操作数都是int类型.则结果采用 而 float a = 3/2 ; /*结果a任然是1 */ 上面的这个表达式是由两个表达式组合而成的. (a = ( 3/ 2 )) 里面的括号是第一个表达式.结果在赋值给a构成第二个表达式.分开写就是 temp = 3/2; float a = temp; 而这个temp是我们假设的一个变量,他的类型可以当做随意的,不参与到类型转换中来,而由等号右边的表达式决定.这样由前一个例子可以知道,temp =1.从而可以知道a = 1. 还有就是.这个图不是完全正确的一张图,只是方便记忆的一张图. 特例是: 1)整形提升:就是 char和short类型在参加算术运算是都会转换成整形.
2)上面所举得的例子都是针对singed的.而对于singned和unsigned.之间不是图上说的都转换到下面的高级的类型.具体的这有c标准原文.
1.如果其中一个操作数的类型是long double,那么另一个操作数也被转换为long double.
(d) 如果以上条件没有满足并且其中一个操作数的类型是unsigned int, 那么另一个操作数也被转换为unsigned int. (e)如果以上条件没有满足,那么两个操作数都被换转为int. 我认为可以这样来记.如果只是同等级别的.则以unsigned为结果.
|
|||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |