c++ - Arduino Mega 上的奇怪计算
问题描述
看看这个非常基本的 Arduino 程序:
long pos = 90 * 1023/360;
Serial.println(pos);
它应该显示 255,但它显示 73。我不明白为什么。
该程序在 Arduino Mega 上运行。
解决方案
因为等号右边的所有东西都是 int 大小的,所以数学是在一个 int 大小的盒子里完成的。第一步是乘以 90 * 1023,结果溢出 int。您必须通过强制编译器将其中一个数字设为 long 来告诉编译器在右侧使用 long:
long pos = 90L * 1023/360;
推荐阅读
- loops - SAS --- 基于主题 ID 和日期合并数据(文件内和跨文件)
- php - POST 方法 api 自定义端点具有不必要的强制 ID 字段
- scala - 火花:javax.servlet.ServletException:java.lang.IndexOutOfBoundsException
- django - 如何在Django中出现警告消息后重定向
- android - 为什么更新我的 Android Studio 后会显示错误类型不匹配?
- pycharm - PyCharm 远程调试是否支持 Windows 服务器?
- database - 计算查询特定数据库表条目的次数?
- fluentd - fluentd中的插件处理后如何知道字段的数据类型
- oracle - Oracle 11g 数据库 NUMBER 值以零结尾,一个错误?
- python - Scrapy 中的顺序请求调用