网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月25日漏签0天
arduino吧 关注:75,576贴子:230,721
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1回复贴,共1页
<<返回arduino吧
>0< 加载中...

为什么计算50*1000结果是负数?

  • 取消只看楼主
  • 收藏

  • 回复
  • 好好958002017
  • 小有美名
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
今天写代码发现了一个很奇怪的现象,
请大家解释下,之前用的int会出错,然后换了long按理来说应该够用了呀,怎么会出现这也的错误?


  • 好好958002017
  • 小有美名
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在stackoverflow上查到了类似的问题,原因是数值溢出造成的

————————————————————————————
《Arduino Arithmetic error negative result》
问题:
I am trying to times 52 by 1000 and i am getting a negative result
int getNewSum = 52 * 1000;
but the following code is ouputting a negative result: -13536
————————————————————————————
解决方法1:将int更换成更大的data type
int:
16 bit: from -32,768 to 32,767
32 bit: from -2,147,483,648 to 2,147,483,647
unsigned int: from 0 to 65,535
long: from 2,147,483,648 to 2,147,483,647
unsigned long: from 0 to 4,294,967,295
解决方法2:化简计算方法
比如我要实现一个倒计时的程序,以前的计算方法是这样的:
int countDownData[2]={25};//minute,second
val = (countDownData[0]*60000 + countDownData[1]*1000)/intervalSpeed
换成下面这样后,结果虽然一样,但通过分开计算,先算除法,计算过程中产生的数值就会小很多
val = countDownData[0]*(60000/intervalSpeed) + countDownData[1]*(1000/intervalSpeed);
参考文档:
------------------------------
《数值溢出(arithmetic overflow)问题与解决方案》
https://blog.csdn.net/lanchunhui/article/details/52425939
--------------------------------
《Arduino Arithmetic error negative result》
https://stackoverflow.com/questions/20594628/arduino-arithmetic-error-negative-result


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回arduino吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示