首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么有些CPU有不同的指令来执行带符号和无符号的操作?

为什么有些CPU有不同的指令来执行带符号和无符号的操作?
EN

Stack Overflow用户
提问于 2020-02-17 03:10:10
回答 2查看 444关注 0票数 0

让我们假设我们有以下二进制数及其表示法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
| bin | unsigned | signed   |
|:---:|----------|----------|
| 110 | 6        | -2       |
| 111 | 7        | -1       |

现在不管是有符号的还是无符号的,111 + 110 = 1101,现在我可以将结果1101解释为有符号的或无符号的,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
| bin  | unsigned | signed   |
|:----:|----------|----------|
| 1101 | 13       | -3       |

它与小数运算匹配:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
6+7 = 13
-1-2 = -3

在做signed additionunsigned addition之间没有区别。那么为什么CPU会有不同的电路/指令来进行这种操作呢?

EN

回答 2

Stack Overflow用户

发布于 2020-02-17 03:26:34

因为2的补码加/减与无符号加/减是相同的二进制操作。但为了进行比较(以及除法和加法乘法),将MSB解释为符号位或不符号位很重要。

一些CPU只有一条cmp指令来设置所有标志,然后你就可以让你的分支指令检查一个特定的标志条件(谓词)。其他没有标志/条件代码的CPU(如MIPS和RISC-V)在它们的比较到寄存器指令中需要谓词。

x86 / ARM上的SIMD比较指令也是比较进入寄存器的,不设置多个不同的标志,因此它们也将谓词作为比较指令的一部分(就像cmpps使用带有谓词的立即字节,或者对于整数有pcmpgtd /pcmpeqd。)

票数 2
EN

Stack Overflow用户

发布于 2020-02-18 03:35:18

这取决于二进制表示法。这是2s补码表示的要点--当使用2s补码时,固定宽度操作数的有符号和无符号加法、减法和乘法以及相同宽度的结果是相同的,因此您可以对这两种操作数使用相同的硬件指令。

如果你使用1s补码或符号幅度,你需要有符号运算和无符号运算之间的细微差别。

在这里,部门是不同的,扩大业务也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60255445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文