深入理解原码、反码和补码

在这里插入图片描述

文章目录

  • 前言
  • 原码
  • 反码
  • 补码
  • 原码、反码、补码之间的转换
  • 为什么需要反码和补码?

前言

在计算机领域,经常会听到原码、反码和补码这些概念。这些概念是计算机中对数值进行存储和运算的基础。本文将深入探讨这些概念,解释它们的定义、特点以及在计算机中的重要性。

原码、反码、补码都是二进制的一种表示形式,但它们在表示有符号整数时引入了符号位,这是为了区分正数和负数。它们与普通的二进制表示有一些区别,主要在于引入了符号位和处理负数的方式。

原码

原码是最直接的二进制表示形式,也是最容易理解的。在原码中,数值的最高位是符号位(0代表正数,1代表负数),其余位表示数值的大小。

  • 正数的原码:最高位为0,后面是数值的二进制表示。
  • 负数的原码:最高位为1,后面是数值的二进制表示。

注意:正数的原码、反码、补码都相同

举例:

  • 正数10的原码是:00001010
  • 负数-10的原码是:10001010

反码

反码解决了原码中0的符号有两种表示形式的问题。正数的反码与原码相同,负数的反码是对应正数的原码除符号位外,其余位取反。

  • 正数的反码:与原码相同。
  • 负数的反码:对应正数的原码除符号位外,其余位取反。(符号位不变,其余按位取反)

举例:

  • 正数10的反码是:00001010
  • 负数-10的反码是:11110101(对应正数的原码除符号位外取反)

补码

补码解决了反码中0的符号位有两种表示形式的问题。正数的补码与原码相同,负数的补码是对应正数的反码末位加1。

  • 正数的补码:与原码相同。
  • 负数的补码:对应正数的反码除符号位外,其余位取反,然后末位加1。
    举例:
  • 正数10的补码是:00001010
  • 负数-10的补码是:11110110(对应正数的反码末位加1)

原码、反码、补码之间的转换

原码、反码和补码之间可以相互转换,以下是简单的转换规则:

  1. 原码转反码:对于正数,原码、反码和补码都相同,因此不需要转换。对于负数,将原码的符号位保持为1,其余各位取反。
  2. 原码转补码:对于正数,原码、反码和补码都相同,因此不需要转换。对于负数,符号位不变,其余按位取反,最后加1
  3. 反码转原码:反码转原码时,如果反码的最高位是1(负数),则其余位取反,得到对应的原码。如果反码的最高位是0(正数),则其余位与反码相同,直接得到原码。
  4. 补码转原码:补码转原码时,如果最高位是1(负数),需将其余位取反,然后减1,得到原码。如果最高位是0(正数),则与补码相同。

举例:
正数10的原码、反码和补码都是:00001010
负数-10的原码是:10001010,反码是:11110101,补码是:11110110

注意:在计算机运算的时候,都是以补码的方式来运算的,当我们看运算结果的时候,要看他的原码!

为什么需要反码和补码?

原码和反码存在0的两种表示形式,而补码通过去除多余的零表示,并简化了加法运算。在补码表示下,加法运算可以通过普通的二进制加法实现,无需额外的规则,这大大简化了计算机内部运算的复杂度。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460763.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马程序员——html css基础——day09——CSS高级

目录: 定位 相对定位:绝对定位定位居中固定定位堆叠层级z-index高级技巧 CSS精灵案例-写出自己的名字字体图标下载字体使用字体CSS修饰属性 垂直对齐方式过渡表单获得焦点选择器focus透明度opacity光标类型cursor禁用鼠标样式表格样式-合并相邻两个边框…

第59讲订单数据下拉实现

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;/*** 订单查询 type值 0 全部订单 1待付款 2 待收货 3 退款/退货* param type* return*/RequestMapping("/list")public R list(Integer type,Integer page,Integer pageSize){System.out.pri…

使用 Docker 镜像预热提升容器启动效率详解

概要 在容器化部署中,Docker 镜像的加载速度直接影响到服务的启动时间和扩展效率。本文将深入探讨 Docker 镜像预热的概念、必要性以及实现方法。通过详细的操作示例和实践建议,读者将了解如何有效地实现镜像预热,以加快容器启动速度,提高服务的响应能力。 Docker 镜像预热…

传输层协议 ——— TCP协议

TCP协议 TCP协议谈谈可靠性为什么网络中会存在不可靠?TCP协议格式TCP如何将报头与有效载荷进行分离?序号与确认序号 确认应答机制(ACK)超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字…

关于使用sort函数来快排的几种使用方法(总结)

sort 函数是一个极好的排序函数,因为其运行速度块,占用内存少,排序也省力,深受程序员们的喜爱,具体用法这里就不再多介绍了,今天主要强调以下几点快排: 1.从大到小快排: #include &…

数字图像处理实验记录九(数字形态学实验)

一、基础知识 1.形态学,用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为有本质的形状特征,如边界连通区域等。 2.膨胀运算:膨胀会使目标区域范围“变大”,将于目标区域接…

如何给闲置电脑安装黑群晖

准备 diskgenius ,黑群晖引导文件(有些需要扩展驱动包),如果给U盘安装需要balenaEtcher或者rufus(U盘安装还需要ChipGenus),如果给硬盘安装需要有pe推荐firePE或U启通 我以U盘为例 首先去找这…

20240203在WIN10下使用GTX1080配置stable-diffusion-webui.git不支持float16精度出错的处理

20240203在WIN10下使用GTX1080配置stable-diffusion-webui.git不支持float16精度出错的处理 2024/2/3 21:23 缘起:最近学习stable-diffusion-webui.git,在Ubuntu20.04.6下配置SD成功。 不搞精简版本:Miniconda了。直接上Anacoda! …

Go 语言中如何大小端字节序?int 转 byte 是如何进行的?

嗨,大家好!我是波罗学。 本文是系列文章 Go 技巧第十五篇,系列文章查看:Go 语言技巧。 我们先看这样一个问题:“Go 语言中,将 byte 转换为 int 时是否涉及字节序(endianness)&#x…

前端JavaScript篇之对执行上下文的理解

目录 对执行上下文的理解创建执行上下文 对执行上下文的理解 当我们在执行JavaScript代码时,JavaScript引擎会创建并维护一个执行上下文栈来管理执行上下文。执行上下文有三种类型:全局执行上下文、函数执行上下文和eval函数执行上下文。 在写代码的时…

飞书上传图片

飞书上传图片 1. 概述1.1 访问凭证2. 上传图片获取image_key1. 概述 飞书开发文档上传图片: https://open.feishu.cn/document/server-docs/im-v1/image/create 上传图片接口,支持上传 JPEG、PNG、WEBP、GIF、TIFF、BMP、ICO格式图片。 在请求头上需要获取token(访问凭证) …

停车场|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)

停车场管理系统目录 目录 基于Springboot的停车场管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 (1)车位管理 (2)车位预订管理 (3)公告管理 (4&#…