binary - 哪些算术运算在无符号数和二进制补码有符号数上是相同的?

标签 binary twos-complement instructions instruction-set

我正在设计一个简单的玩具指令集和随附的模拟器,我正在尝试找出要支持的指令。在算术方面,我目前有无符号加法、减法、乘法和除法。但是,我似乎无法找到以下问题的明确答案:哪些算术运算符需要有符号版本,哪些是无符号和二进制补码有符号版本等价的?

因此,例如,二进制补码中的 1111 等于 -1。如果你给它加 1 并假装它是一个无符号数,你会得到 0000,即使将它视为 -1 也是正确的。但是,这是否适用于所有数字?那么其他三个运算(减法、乘法、除法)呢?

最佳答案

加法和减法对于有符号和无符号 2s 补码是相同的,假设您要以大多数 CPU 的正常方式处理上溢/下溢,即只是环绕。乘法和除法是不同的。因此,无论符号如何,您只需要一个加法例程和一个减法例程,但是您需要单独的有符号和无符号乘法和除法。

关于binary - 哪些算术运算在无符号数和二进制补码有符号数上是相同的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21475286/

相关文章:

c++ - 在不修改底层二进制文件的情况下将 C++ 类型 int16_t 转换为 int64_t

assembly - sra(算术右移)与 srl(逻辑右移)

php - php OPCODE被zend解释时,真正执行的是什么?

binary - 如何将十进制转换为二进制?

file-io - Fortran 可以直接从二进制文件读取字节吗?

java - Java 中与负字节的异或

c - C 中的二进制加法,来自数组

assembly - cmp 和 ja 问题

c - 如何从汇编指令到 C 代码

c++ - 在C++中序列化二进制数据的正确方法