打印
[C语言]

STC单片机C语言默认类型转换的问题

[复制链接]
1306|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zengx_xue|  楼主 | 2013-10-18 09:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char  testuChar;
unsigned long  testuLong;


testuChar = 7;
testuLong = testuChar*100000;  //7000000
testuLong = testuChar*10000;   //错误值
testuLong = (unsigned long)testuChar*10000;   //70000
testuLong = testuChar*1000;  //7000
testuLong = testuChar*100; //7000  错误值
testuLong = testuChar*10;  //7000  错误值

testuLong = testuChar;    //7

还请各位高手不吝赐教!

相关帖子

沙发
ayb_ice| | 2013-10-18 10:06 | 只看该作者
testuLong = testuChar*10000;   //错误值

错误就对了

testuChar是8位类型,10000是16位类型,结果仍是16位类型,结果可能溢出了

使用特权

评论回复
板凳
coody| | 2013-10-18 12:39 | 只看该作者
这个跟STC一毛钱的关系都没有,只跟编译器有关。

testuLong = testuChar*100; //7000  错误值

KEIL会先拿两个unsigned char相乘(结果还是unsigned char,高字节丢弃),再送testuLong。

使用特权

评论回复
地板
andyjian| | 2013-10-29 16:51 | 只看该作者
看的有些模糊

使用特权

评论回复
5
bingmcu| | 2013-10-29 17:48 | 只看该作者
结果可能溢出了

使用特权

评论回复
6
lhchen922| | 2013-10-29 18:57 | 只看该作者
溢出

使用特权

评论回复
7
gincn| | 2013-10-29 21:44 | 只看该作者
我试了一下,结果与楼主不一样,如下:

testuChar = 7;
testuLong = testuChar*10000;   //4464 错误值
testuLong = testuChar*(unsigned int)10000;   //4464 错误值
testuLong = testuChar*(unsigned long)10000;   //70000_对的

testuLong = testuChar*(unsigned char)100; //700_对的
testuLong = testuChar*(unsigned int)100; //700_对的
testuLong = testuChar*100; //700_对的

testuLong = testuChar*(unsigned char)10;  //70_对的
testuLong = testuChar*(unsigned int)10;  //70_对的
testuLong = testuChar*10;  //70_对的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

35

帖子

1

粉丝