首页 > 解决方案 > MATLAB int32 在第 18 位溢出

问题描述

我正在尝试使用 MATLAB 模拟 32 位有符号整数算术。int32 函数的行为与预期不同:

accu = 0
inc = 40000
accu = int32(accu + inc)
accu = int32(accu + inc)
accu = int32(accu + inc)
accu = int32(accu + inc)

各加后的 accu 值为 40000、80000、120000 和 -102144。我预计 160000 而不是负数,因为溢出应该只发生在第 32 位,而不是第 18 位。

说来也怪,

int32(120000 + 40000)

正如预期的那样给出160000。使用上述变量时,如何强制执行 int32 操作?


编辑:我正在添加我正在做什么的截图,因为有些人无法重现该行为。

截屏

标签: matlabsignedinteger-overflow

解决方案


一个文件夹位于文件重载 int32 类型的加号运算符的路径中。所以 MATLAB 仍然使用内置类型,但不是内置类型,而是执行了不同的类型,导致了这种效果。


推荐阅读