一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3389|回复: 15

[51单片机] 请教一下高手:关于数值的乘法运算问题

[复制链接]
发表于 2018-4-22 15:54 | 显示全部楼层 |阅读模式
刚才遇到了一个很奇怪的问题,一个定义为unsigned int的值,乘以100出错,但是分两次乘以10就没事。例如:
unaigned int a;
unsigned long b;

b = a * 100;//这样不可以,会出错

b = a * 10;//
b = b * 10;//这样就可以

想请教一下高手,这是为什么?

发表于 2018-4-22 17:08 | 显示全部楼层
很多年没写C。
这样可以吗:b=(long)a*100
回复

使用道具 举报

发表于 2018-4-22 17:45 | 显示全部楼层
b = a * 100l;
回复

使用道具 举报

发表于 2018-4-22 18:45 | 显示全部楼层
把a也设置成long型试下出错不
回复

使用道具 举报

发表于 2018-4-22 22:21 | 显示全部楼层
vc 2015  中,没有报错


~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

发表于 2018-4-22 22:53 | 显示全部楼层
问题是a等于多少,a*10(unsigned int )会不会溢出。。。
回复

使用道具 举报

发表于 2018-4-23 01:36 | 显示全部楼层
试试2楼的写法吧。
b=(unsigned long)a*100;
回复

使用道具 举报

发表于 2018-4-23 07:21 | 显示全部楼层
devcang 发表于 2018-4-22 22:21
vc 2015  中,没有报错

vc 肯定不报错了,默认的数字宽度就应该是32b.

IAR/KEIL c51 不一样的.

那你打开了个 stm32的工程来也不会出现楼主这样的问题.


回复

使用道具 举报

发表于 2018-4-23 09:54 | 显示全部楼层
junyee 发表于 2018-4-23 07:21
vc 肯定不报错了,默认的数字宽度就应该是32b.

IAR/KEIL c51 不一样的.



因为楼主没有具体说明编译的环境,所以,随意拿个编译器来试试。。。。。。。就楼主提供的代码,a未初始化
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C51 COMPILER V9.01 - SN: K1DMC-19BIFC
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009

C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

在测试,也没有问题

unsigned int a=1;
unsigned long b;

b = a * 100;


回复

使用道具 举报

 楼主| 发表于 2018-4-23 19:40 | 显示全部楼层
Joe_Black 发表于 2018-4-22 17:08
很多年没写C。
这样可以吗:b=(long)a*100


感谢!这样写就可以使用了!


回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-29 16:21 , Processed in 0.034706 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表