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

原码 / 反码 / 补码的介绍及认知

在计算机科学中,原码、反码和补码是数字表示方法,它们用于简化计算机中数字的算术运算,尤其是二进制数的加减运算。下面我将简要介绍这三种表示方法:

  1. 原码:原码是最直观的表示方法,它直接用二进制数表示一个数,包括正负号。在原码中,最高位(最左边的位)是符号位,0 表示正数,1 表示负数。其余位表示数值本身。例如,十进制数 +5 的原码表示为0000 0101,而 -5 的原码表示为 1000 0101

  2. 反码:反码主要用于表示负数。对于正数,其反码与其原码相同。对于负数,其反码是将原码除符号位外的所有位取反(0 变 1,1 变 0)。例如,十进制数-5的反码表示为1111 1010

  3. 补码:补码是计算机中最常用的表示方法,用于进行二进制加法运算。对于正数,其补码与其原码相同。对于负数,其补码是其反码加 1。补码的一个重要特性是,任何数的补码加上该数本身,结果总是 0。例如,十进制数 -5 的补码表示为 1111 1011

补码的使用可以简化计算机中的算术运算,因为加法和减法可以统一为加法运算。当进行减法运算时,可以将减数的补码与被减数相加,从而得到结果。

这里有一个简单的示例来说明补码运算:

  • 假设我们要计算十进制数 5 - (-3)。
  • 首先,将两个数转换为二进制:5 的二进制是 0101,-3 的补码是 1101
  • 然后,将5和-3的补码进行二进制加法运算:0101 + 1101 = 10010
  • 最后,将结果转换回十进制:10010 等于 18,这与 5 + 3 的结果一致。

原码(Sign-Magnitude)

概念

  • 原码是一种最简单的表示有符号数的方法。
  • 使用最高位(最左边的一位)表示符号:0表示正数,1表示负数。
  • 其余位表示数值的大小。

示例

  • 8位原码表示:
    • +5:00000101
    • -5:10000101

反码(Ones' Complement)

概念

  • 反码是通过对原码的数值部分逐位取反(0变1,1变0)得到的。
  • 正数的反码和原码相同。
  • 负数的反码是其原码除符号位外所有位取反。

示例

  • 8位反码表示:
    • +5:00000101
    • -5:11111010

补码(Two's Complement)

概念

  • 补码是反码加1得到的。
  • 正数的补码和原码相同。
  • 负数的补码是其反码加1。

示例

  • 8位补码表示:
    • +5:00000101
    • -5:11111011(反码为11111010,加1得到11111011)

总结

  • 原码:简单但有两个零。
  • 反码:解决了一部分问题,但仍有两个零。
  • 补码:最常用、最有效,只有一个零,简化了计算机的加减法运算。

计算机内部广泛使用补码表示有符号整数,因为它简化了硬件设计和运算处理。了解这些概念有助于理解计算机的底层运算机制和一些算法的实现原理。  


http://www.mrgr.cn/news/17892.html

相关文章:

  • Python测试开发基础(三)---random模块
  • SQLi-LABS靶场56-60通过攻略
  • 【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器
  • Windows 11家庭中文版中管理员阻止运行应用程序的问题
  • C++第四十四弹---Lambda表达式的妙用:高效解决编程中的匿名函数问题
  • 去中心化身份验证:Web3时代数字身份的革新
  • Python测试开发基础(一)
  • Ascend显卡创建虚拟vgpu实例
  • 安防监控视频打手机检测算法核心技术打手机检测算法源码、模型简介
  • C++多线程
  • 云原生主键模型:高效、弹性,省钱又省心
  • Oracle rac模式下undo表空间爆满的解决
  • 全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用
  • C++ 编译三环节
  • centos8 install .net8
  • 前端vue中怎么判断接口请求返回的时长
  • 页面滚动到指定位置——记录div滚动高度,并下次自动滚动到该位置
  • Shopee、Lazada等跨境平台如何获取优质的评价?
  • 09-02 周一 Ubuntu上使用docker-compose部署elasticsearch和kibana服务
  • C#上位机使用Microsoft.Office.Interop.Excel和EPPlus库对Excel或WPS表格进行写操作