亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

理解二进制负数:符号-数值、补码与二补码

减法可转化为加法,将被减数视为负值;如 7 − 5 变为 7 + (−5)。

掌握正数二进制表示后,下一步是编码负数,使减法能复用加法流程。

十进制中负号前缀最高位(如 −5)。二进制硬件只有高/低两态,必须在位模式内编码符号。

此处无第三符号如“负号”。一种方案是保留一位表示数学符号:

理解二进制负数:符号-数值、补码与二补码

用位表示除位权外的用途易混淆;如 1101₂ 若不将最高位视为符号,会被读作十三。

先决定容纳最大幅度所需总位宽,确保所有运算在该宽度内。

下例将范围限制在 −7(1111₂)至 +7(0111₂),视最高位为符号位,防止误读。

将 −5 编码为 1101₂ 说明符号-数值制,最高位指示符号而非数值,用位置纯度换实用性。

最高位指示符号;其余位保留标准位权(二的幂)。

补码

符号-数值制虽概念直观,却使二进制加法复杂化。如何用普通加法将 −5(1101₂)加到另一数?

定制加法算法违背初衷,等同于手工减法,失去计算优势。

替代方案——补码——允许负数用标准二进制加法相加,且自然符合位权。

此方案中最高位仍划分范围,但现在带负位权(如 −8)。例如 −5 编码如下:

理解二进制负数:符号-数值、补码与二补码

右三位可表示0–7幅度,最左位代表0或−8,可表示从−7(1001₂ = −8+1=−7)到+7(0111₂ = 0+7=7)的整数。

正数不变,负数需补码运算。

理解二进制负数:符号-数值、补码与二补码

右列负数是右三位加左位负八之和,故不遵循正数递增规律。

右三位须设定使加上负八位权得所需负总和。

二补码

右三位是正数对应的二补码。例如:

理解二进制负数:符号-数值、补码与二补码

以第四位为负权位(−8),任意正数的二补码是加到−8上得该数负值所需的值。

计算二补码简单:全位取反(一补码)再加一。如求五(101₂)的二补码,先反得010₂,加一得011₂,即三位二补码下的−5。

若同时操作所有位(含最高位),生成二补码同理。如将 0101₂(五)转为负五:

全位反 → 1010₂;加一 → 1011₂,即四位二补码下的−5。

关键是负权位位置须在二补码转换前固定。若第八位为负权位(10000000₂),0000101₂ 的二补码为 1111011₂,即八位二补码下的−5。

因此八位系统中 +5 为 00000101₂,−5 为 11111011₂。

相关练习:

工业技术

  1. 3位二进制计数器:555定时器与4027触发器
  2. 解码电子学中的数字与符号
  3. 十进制与二进制数制:位权、效率与转换
  4. 八进制与十六进制数制:工程师实用指南
  5. 数值与数制:理解区别及其现实影响
  6. 利用二补码进行二进制减法
  7. 理解 Op-Amp 负反馈:电压跟随器与稳定性
  8. 在 PLCnext 上构建首个 Go 应用:新手入门指南
  9. C++数值类型实战指南:基本类型、数学函数与随机数生成
  10. MATLAB 数值类型详解:存储、转换与范围查询
  11. Python 数字类型详解:不可变数值数据的操作与数学函数
  12. 掌握 Java 集合算法:排序、打乱、搜索与更多实用操作