[ZLG-MCU] C语言数据运算注意:自动类型转换

[复制链接]
 楼主| 思行合一 发表于 2011-2-26 01:42 | 显示全部楼层 |阅读模式
自动类型转换:
字符型数据可以与整型数据通用,因此,整型、字符型、实型(包括单、双精度)数据可以出现在一个表达式中进行混合运算。例如:已定义i为int变量,f为float型变量,d为double型变量,l为long型变量,有下面的式子:
100+'A'+i*f-d*l
[url=file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Temp/WindowsLiveWriter-429641856/supfiles1A70DC/clip_image002[3].gif]file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Temp/WindowsLiveWriter-429641856/supfiles1A70DC/clip_image002_thumb.gif[/url]
是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算,转换的规则如图2-2所示。图中横向箭头表示必定的转换,如字符数据必定先转换为整数,short型转换为int型,float型数据在运算时一律先转换成双精度型,以提高运算精度(即使是两个float型数据相加,也要先转换成double型,然后再相加)。
纵向的箭头表示当运算对象为不同类型时转换的方向。例如int型与double型数据进行运算,先将int型的数据转换成double型。然后再进行两个同类型(double型)数据间运算,结果为double型。
注意:箭头方向只表示数据类型级别的高低,由低向高转换,不要理解为int型先转成unsigned型,再转成long型,再转成double型。如果一个int型数据与一个double型数据运算是直接将int型转成double型。同理,一个int型与一个long型数据运算,也是先将int型转换成long型。
上式运算次序为:
①进行100+'A'的运算,先将'a'转换成整数65,运算结果为165;
②进行i*f的运算,先将i与f都转换成double型,运算结果为double型;
③整数165与i*f的值相加,先将整数165转换成双精度数(小数点后加若干个0,即165.000000),运算结果为double型;
④将变量l转换成double型,d*l结果为double型;
⑤将100+'A'+i*f的结果与d*l的结果相减,结果为double型。
上述的类型转换是由系统自动进行的。
转载请注明来自秦工的博客,本文地址:http://www.arm32.com/post/11003.html
明天我还来 发表于 2011-2-26 22:13 | 显示全部楼层
帮顶了。
黑发尤物 发表于 2011-2-27 10:18 | 显示全部楼层
到秦工的博客看看去
bit6019 发表于 2011-2-27 10:21 | 显示全部楼层
恩,是个好博客
杜_U_ME 发表于 2011-2-27 10:55 | 显示全部楼层
比如一个  int *a;

b=(char*)a;

a是不会变化的是吧

小弟太弱,见谅
weimao228 发表于 2011-4-11 16:23 | 显示全部楼层
可是PICC的整型是16位的,转到字符型的只有低8位能够赋值的。
6019赵文 发表于 2011-4-11 21:28 | 显示全部楼层
不错,受教了
bnyuli 发表于 2011-4-12 15:06 | 显示全部楼层
不错 不错  受领教了
FVJFIFE 发表于 2011-4-12 22:19 | 显示全部楼层
受益匪浅啊
ty新气象 发表于 2011-4-17 17:40 | 显示全部楼层
:handshake
即时生效 发表于 2011-4-17 19:23 | 显示全部楼层
学习了
linas 发表于 2011-4-17 21:05 | 显示全部楼层
看看去。
huzixian 发表于 2011-4-19 22:37 | 显示全部楼层
受教了
ladygaga 发表于 2011-4-20 19:53 | 显示全部楼层
学习了。
foreverly 发表于 2011-6-20 17:10 | 显示全部楼层
秦工的博客火了。:D
您需要登录后才可以回帖 登录 | 注册

本版积分规则

215

主题

1391

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部