检查 addc 功能的溢出
Checking overflow for addc function
我正在编写一个C++程序来模拟16位虚拟机。我有一个函数"addc",我必须在其中检查溢出。我对溢出的条件有点迷茫。我知道当你添加 2 个正数并得到一个负数时,或者当您添加 2 个负数并得到一个正数时,就会发生溢出。但是,在我的函数 addc 中,我有 3 个数字必须添加。 我是否正确接近这一点?
我的函数应该这样做:
寄存器目标 = 寄存器目标 + 寄存器源 + 进位
(rd = rd + rs + c)
到目前为止,为了检查溢出,我有这段代码。
//Check when adding positive numbers gives negative result
//My carry bit is always positive (either 0 or 1)
if(rd >= 0 and rs >= 0 and c >= 0) and ((rd + rs + c) < 0)){
//set overflow bit
}
else if( rd < 0 and rs < 0 and c < 0) and (rd + rs + c) > 0) ){
//set overflow bit
}
我的困惑是针对其他条件。C 将始终为 0 或 1,因此它永远不会进入 else if 循环,因此几乎没有理由使用 else if 循环。我这样做对吗?或者我必须将进位 (c) 添加到其中一个操作数(rd 或 rs)中,这样我就只有两个操作数可以比较。喜欢这个?
else if( rd < 0 and ((rs + c) < 0)) and (rd + (rs + c)) > 0) ){
//set overflow bit
}
你的第二个if
陈述似乎是在进位可能是负数的印象下运行的,这应该是某些东西没有加起来的第一个线索(正如Foghorn Leghorn会说的那样,"嘿,我想我只是搞笑了!")。
执行此操作的正确方法是将三个值的单个添加操作简化为两个单独的添加操作的情况。首先,添加 rd
和 rs
,并使用已定义的条件检查溢出。然后,获取第一次添加的结果,并将其添加到进位,并在此处检查溢出。第二次溢出检查可能非常简单,假设进位为 0 或 1。
如果确定第一个或第二个添加操作已溢出,则最终结果将设置溢出位。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 'short int'持有的值溢出,但"自动"不会溢出?
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 大于65535的C++数组[size]引发不一致的溢出
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- C++ Unordered_set功能中的溢出
- 虚拟功能是否不太可能导致堆栈溢出
- 代码仅在2个功能实现中的1个中溢出
- 为什么功能不给整数溢出
- 功能参数导致堆栈溢出
- 如何在功能中的理智检查过程中处理整数的溢出
- 当与可能导致缓冲区溢出的功能一起使用时,外部变量是否比其他变量更大
- QtCore,QMutex 类,锁定功能 - 堆栈溢出故障
- 检查 addc 功能的溢出
- basic_streambuf炒锅的功能溢出和下溢如何