一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1613|回复: 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|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-16 13:24 , Processed in 0.064785 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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