当前位置: 首页 > news >正文

反码与补码

1. 原码(Sign-Magnitude)

  • 定义:最高位为符号位(0正1负),其余位表示绝对值。

  • 示例

  • +5:0000 0101

  • -5:1000 0101

问题

  • 加减法需处理符号位,硬件复杂。

  • 0有两种表示(0000 00001000 0000)。

2. 反码(Ones' Complement)

  • 定义

    • 正数与原码相同。

    • 负数:符号位不变,数值位按位取反。

  • 示例

    • +5:0000 0101

    • -5:1111 1010

  • 运算

    • 减法可转为加法,但需处理循环进位(最高位进位加到最低位)。

    • 例如:5 + (-3)

0000 0101 (5)
+ 1111 1100 (-3的反码)
= 1 0000 0001 → 补上进位 → 0000 0010 (2)

 

  • 问题

    • 0仍有两种表示(0000 00001111 1111)。

3. 补码(Two's Complement)

  • 定义

    • 正数与原码相同。

    • 负数:反码加1(符号位参与运算)。

  • 示例

    • +5:0000 0101

    • -5:1111 1011

  • 优势

    • 统一加减法:无需处理符号位,直接相加后舍弃溢出位。

    • 唯一0表示0000 0000

    • 扩展负数范围:n位补码可表示−2�−1−2n−1到2�−1−12n−1−1(如8位:-128~127)。

  • 运算示例5 + (-3)

0000 0101 (5的补码)
+ 1111 1101 (-3的补码)
= 1 0000 0010 → 舍弃进位 → 0000 0010 (2)

4.为什么补码成为标准? 

  1. 运算统一:加减法仅需加法器,简化电路。

  2. 0唯一性:避免歧义。

  3. 范围更大:多表示一个负数(如8位的-128)

5.快速求补码的方法

  1. 从右往左找到第一个1,保留该位及右侧所有位,左侧全部取反。

  2. 例如:求-5(8位):

  • 原码:0000 0101
  • 反码:1111 1010
  • 补码:1111 1011(反码+1)

 

相关文章:

  • 【阿里云】控制台使用指南:从创建ECS到系统诊断测评
  • (base)user1@ubuntu:~$pip install xxxx(xxxx表示第三方库) 分析
  • Centos7系统遇到的第一个问题 yum
  • 【面试】框架
  • ngx_regex_create_conf
  • Git(一)
  • leetcode hot100--动态规划【五步总纲】
  • 文本对抗样本系列的论文阅读笔记(整理合订)
  • 学习笔记11——并发编程之并发关键字
  • ArcGIS Pro中字段的新建方法与应用
  • 从新手到专家:嵌入式代码空间优化技巧
  • C++ Primer Plus第十二章课后习题总结
  • 【二分算法】-- 三种二分模板总结
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.2基于Painless脚本的日志告警
  • 空指针异常的触发
  • 论文阅读分享——UMDF(AAAI-24)
  • 用Haskell语言和wreq库配合HTTP写个爬虫程序
  • Java学习--Redis
  • vulnhub靶场【digitalworld.local系列】的electrical靶机
  • Rabbitmq--延迟消息
  • 缅甸发生5.0级地震
  • 多个“首次”!上市公司重大资产重组新规落地
  • 上海博物馆展览进校园,“小先生”传递文物知识
  • 消息人士称俄方反对美国代表参加俄乌直接会谈
  • 普京调整俄陆军高层人事任命
  • 张涌任西安市委常委,已卸任西安市副市长职务