微控制器上的二元算术
Binary Arithmetic on Microcontroller
我在二进制算术过程中找到适当处理变量的信息很难。我目前正在努力在ATMEL ATTINY84微控制器上实现算法。我正在用C 进行编码。
我遇到的问题是,使用二进制算术,您最终可能会溢出,或者最终可能会出现一个比存储在其中的值大的可变大小。如果这让我与一个例子解释,我深表歉意。
uint16_t A=500;
uint8_t B=8;
uint32_t C;
C=A*B;
从我通过Google搜索学到的知识中,如果将大小m的变量乘以大小n的变量,则会导致大小m n的变量。在上述情况下,C = 4000,但M N为24。但是,值4000可容纳16位。我可以简单地将C声明为16位还是必须如上图所示是32位?
uint16_t A=500;
uint8_t B=8;
uint16_t C;
C=A*B;
如果我确实必须将4000存储在32位的变量中,我可以简单地将其传输到以下
的变量为16位的变量uint16_t D;
uint32_t C
C=4000;
D=C;
事先感谢您的帮助。
乘法不会返回比两个操作数更大的类型,除非您具体说明。该操作将将所有变量转换为最大的宽度,然后乘以乘。当您将16位INT乘以8位int时,8位int将转换为16位int,然后将两者乘以乘。尽管数学上的结果可能大于16位,但该操作只会返回16位。如果结果无法在16位的空间中适合,则将设置溢流标志(检查您的微控制器手册以查看如何检查)。
在您的情况下,操作将返回4000,可以存储在16位变量中,因此很好。
uint16_t A=500;
uint8_t B=8;
uint32_t C;
C=A*B;
它将将A和B提升到C的大小,然后进行数学。
uint16_t A=500;
uint8_t B=8;
uint16_t C;
C=A*B;
它将将A和B提升到C的大小,然后进行数学。
uint16_t D;
uint32_t C;
C=4000;
D=C;
您可能会或可能不会警告您试图将32位推到16中。
D=(uint16_t)C;
将在没有警告的情况下将下部16位夹住。两种情况都导致较低的16位进入d。
相关文章:
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- 如何集成 HID USB 控制器?
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 更高效地在微控制器上对C++进行基准测试
- 如何修复 Arduino LED 串控制器的代码?
- 重写派生类中的二元运算符
- 如何在 Windows 中通过 SSL 端口枚举域控制器
- 如何使用 c++ 在命令行中创建一个简单的字符控制器?
- 为什么玩家控制器"own"偏航俯仰和滚动,但角色"owns"它的位置?
- 在虚幻引擎中使用运动控制器组件,C++而不是蓝图
- 哗啦��错误:无法识别任何一组可以驱动指定关节的控制器
- 微控制器的首次 gcc 链接器脚本编译但不运行
- 对控制器类的 WorkerScript 访问
- SDL 2 无法打开控制器,但已识别操纵杆
- 最小值/最大值二元运算符
- 将信号从工作线程类连接到控制器类 - QThreads
- C++中基本二元数学运算符的名称
- 在OMNet上实现SDN控制器
- 有人可以给我提供二维二元索引树的算法吗?
- 微控制器上的二元算术