原码、反码、补码、移码的作用

2023-11-06

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

因为一直不是很清楚原码反码的运算和符号位的关系,故想借此机会一举打好计算机数据表示与处理的基础。这里并不讨论这些概念的严格定义,仅仅从个人角度提出理解。


一、原码、反码、移码、补码的概念

计算机中表示数据的方式有两种,分别是无符号数和有符号数。对于无符号数,其实没什么好说的,就全都是正数和0。而对于有符号数来说,原码一般是这个数的二进制表示加上符号位,其中最高位表示符号位。如+7的原码是0 111,最前面的0是符号位,而-7的原码则是1 111,在有符号数中,通常用0表示正号,用1表示负号。
对于一个8位的二进制数来说,原码的表示范围是-127~+127,其中0有两种表示方法,+0和-0。

反码也非常简单,就是原码的符号位不变,将所有二进制位取反即可,如+7的反码是0 000 。反码在实际中并没有什么用,通常用来过渡求补码。

为了计算简便,人们引出了补码的概念,对二进制补码来说,求一个数的补码,就相当于对原码取反+1,符号位不变,如+7的补码是0 001.求补码还有一个快捷方法,就是将原码从右边数第一个1的左边,全部取反,而第一个1自身以及这个1的右边则保持不变,符号位保持不变,如求0 110101001000的补码为:0 001010111000,可以发现加粗的的地方取反,而未加粗的地方不变,符号位也保持不变。

在浮点数中,通常需要对浮点数的位阶比较大小,为了方便比较,就将负数和正数都加上一个偏置值使其全都变为正数,以此来保证比较的速度。这个偏置值通常跟位数有关,通常是2n或2n-1。比如对于一个3位的二进制数,偏置值通常为7或者8。需要注意的是,移码中符号位是参与运算的。

二、深入理解原码和补码的转换

我们都知道,减去一个数等于加上这个数的补码,为什么会这样呢?我们先看看原码的表示。这里以4位二进制数为例子,对于有符号数来说,原码的表示范围是-7到+7,也就是0000到0111一共8个数字,而补码仍然是4位,我们思考一下,正数的补码仍然是正数,说明正数补码占用了+0到+7,也就是0000到0111一共8个二进制表示,而负数占用了-0到-7,也就是从1000到1111也是8个二进制表示。他们的对应关系是怎么样的呢?

真值 原码 补码
+6 0110 0110
+7 0111 0111
-8 - 1000
-7 1111 1001
-6 1110 1010
-5 1101 1011
-4 1100 1100
-3 1011 1101
-2 1010 1110
-1 1001 1111

可以发现,补码就是在正数增大到极限后,从最小的负数开始增加。现在的计算机通常以补码的方式储存数据,这样做的好处是,对任意两个数,无论这两个数是正数还是负数,当他们做加减的运算的时候,只需要将其加起来就可以了,加减法统一使用补码加法解决。
当一个数需要减去一个数的时候,就相当于加上这个数的负数。如4-5=4+(-5)。计算机并不在意这两个数的正负,直接将这两个数的补码相加,最后得到的结果仍为补码,运算结果如下:
0100
1011(-5的补码)
---------------------
1111(-1的补码)
由于有效范围是-8到+7,因此经过补码运算后4-5得到的结果是-1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原码、反码、补码、移码的作用 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • Linux shell:脚本读取文件内容赋给变量的三种方式

    前段时间用到读取配置文件的相关信息 搜索到一些比较好的方法 整理一下作为笔记方便以后查看 先假设现在有一个配置文件net config 内容如下 ID 123 IP 192 168 1 1 Name test 现在我们可以通过以下三种脚本读
  • C++ 点圆运算(构造与析构)

    题目描述 设计一个点类Point 包含私有属性x坐标和y坐标 操作包括 1 构造函数 要求满足两个条件 1 能够使用类Point去创建一个对象数组 缺省构造方法 2 能够接收外来输入的x和y坐标做初始化 提示 构造函数重载 2 析构函数 把
  • Windows Server 2012 R2 -网站—安全设置-IP限制连接(VMware workstation环境)

    安装IP和域限制组件 拒绝特定地址或范围 可选拒绝类型 401 未经授权 403 已禁止 404 未响应 中断 中止 启用域名限制 可以通过域名限制连接 也可以限制一个域 sayms local 启用代理模式 若被限制的客户端通过代理服务器
  • Maven创建Web项目时如何设置JDK的版本

    使用命令 mvn Dwtpversion 1 0 eclipse eclipse 之后 导入的项目 Project Facet 的 java 还是 1 4 而当前使用的 Eclipse 上的设置是高于1 4版本 此时可以通过设置pom插件来
  • Java VisualVM 插件地址,安装Visual VM插件,修改下载插件地址使插件可以直接在JVisualVM中进行下载

    Java VisualVM 插件地址 打开Java VisualVM检查更新插件时 默认的连接连不上 通过浏览器访问之后发现默认的服务器已经404 新地址已经迁移到github 下面这个地址里面有不同版本jdk对应的插件中心地址 https
  • 2003-2019年上市公司治理水平(含原始数据和具体计算过程stata代码)

    2003 2019年上市公司治理水平 1 数据来源及数据说明在压缩包内 2 时间跨度 2003 2019年 3 区域范围 3669家上市公司 4 指标说明 该指标计算的方法的do文件以及参考文献都放在文件中 有需要的小伙伴可以自取 运用主成
  • __declspec(dllexport)与__declspec(dllimport)

    区别 他们都是DLL内的关键字 即导出与导入 他们是将DLL内部的类与函数以及数据导出与导入时使用的 dllexport是在这些类 函数以及数据的申明的时候使用 用他表明这些东西可以被外部函数使用 即 dllexport 是把 DLL中的相
  • Idea Git 已提交代码版本回滚

    本文主要记录在 Idea 中 如何通过 Git 回滚本地仓库和远程仓库代码版本 一 提交本地仓库代码回滚 1 模拟提交到本地仓库 模拟一次提交 提交到本地仓库 未提交到远程仓库 本地仓库 有 远程仓库 无 2 复制提交版本号 复制你想回到的
  • Unity 3D 碰撞体(Collider)

    在游戏制作过程中 游戏对象要根据游戏的需要进行物理属性的交互 因此 Unity 3D 的物理组件为游戏开发者提供了碰撞体组件 碰撞体是物理组件的一类 它与刚体一起促使碰撞发生 碰撞体是简单形状 如方块 球形或者胶囊形 在 Unity 3D
  • 面渣逆袭:分布式十二问,万字图文详解

    大家好 我是老三 不管今年金三银四如何 面渣逆袭系列继续 这期我们来看看分布式 分布式理论 1 说说CAP原则 CAP原则又称CAP定理 指的是在一个分布式系统中 Consistency 一致性 Availability 可用性 Parti
  • DS18B20测量温度

    文章目录 一 DS18B20读取温度步骤 二 初始化复位时序 2 发送一个字节 二 读取数据 1 读取一个Bit 2 读取一个字节 三 启动温度转换 四 判断转换完成 五 读取温度 程序地址 一 DS18B20读取温度步骤 一般在使用DS1
  • 【算法练习】最多等和不相交连续子序列

    200分 题目描述 给定一个数组 我们称其中连续的元素为连续子序列 称这些元素的和为连续子序列的和 数组中可能存在几组连续子序列 组内的连续子序列互不相交且有相同的和 求一组连续子序列 组内子序列的数目最多 输出这个数目 输入描述 第一行输
  • 计算机显卡设置方法,显卡在哪里设置 显卡设置方法【详细介绍】

    电脑中最重要的地方就是显示了 因为电脑cpu的高度运算和计算数据都是因为显卡在一直工作 所以很好的显卡设置能让我们的电脑使用和运行上更加完美 很多人会问那么显卡在哪里设置呢 怎么设置才好呢 想知道就和小编一起看下来吧 显卡在哪里设置 1 显
  • 怎么能跳过苹果服务器降级系统,苹果ios11手机怎样将系统降级?简单三步即可完成降级!...

    近日 苹果偷偷开启了降级通道 那些想降级回iOS 10的小伙伴现在有机会了 那么iPhone手机如何降级 下面为大家带来iOS 11降级教程 一起来看看 iOS 11降级教程 iPhone 5 5S 6 6S 7系列机型的老版本固件 苹果都
  • Android dp px ppi pt等概念的理解

    做Android开发过程中 总会用到px dp pt等概念 下面对它们代表的意义以及互相之间的关系做简单的介绍 目录 1 px 2 ppi 3 pt 4 dp 5 Android获取屏幕状态信息 1 px 像素 就是一个颜色点 一个像素点
  • 深度学习基础------前向传播与反向传播

    当前 深度学习已经应用到很多领域 无人驾驶汽车 黑科技以及图像分类等等 这些前沿的科技也面临许多挑战 如无人驾驶汽车需要进行物体的检测 行人的检测 标志的识别以及速度识别等等 图像分类已经成为一项重要技术 它是计算机视觉的核心任务 其困难之
  • 客户端启动耗时分析:基于Qt、C++的Windows应用程序

    客户端的启动作为所有交互的开端 经常被拿来进行分析 比较和优化 其中讨论比较多的就是启动耗时 本文整理了一些基于Qt C 的Windows客户端的启动耗时问题和分析经验 1 背景 客户端启动影响用户体验 启动耗时变久经常是由于工程师本身经验
  • Vue学习笔记总结

    目录 Vue的安装 1 官网下载 2 CDN 3 NPM Vue实例 1 创建实例 2 数据与方法 3 钩子函数 模板语法 1 插值 2 指令 计算属性 1 初识计算属性 2 计算属性缓存 vs 方法 3 计算属性 vs 侦听属性 4 计算
  • 解决CSGO出现加载某些地图时,进入载入界面闪退游戏的问题

    关于这个问题 我经过steam技术客服的回复后 关键问题在于 我的内存不够用 导致游戏在加载地图资源的时候 内存溢出 导致游戏崩溃 你可以用WIN X在事件查看器 windows日志 应用程序 中看到csgo崩溃的时候留下的错误信息 关于这
  • 原码、反码、补码、移码的作用

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 原码 反码 移码 补码的概念 二 深入理解原码和补码的转换 前言 因为一直不是很清楚原码反码的运算和符号位的关系 故想借此机会一举打好计算机数据表示与处理