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

在这里插入图片描述

文章目录

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

前言

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

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

原码

原码是最直接的二进制表示形式,也是最容易理解的。在原码中,数值的最高位是符号位(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的两种表示形式,而补码通过去除多余的零表示,并简化了加法运算。在补码表示下,加法运算可以通过普通的二进制加法实现,无需额外的规则,这大大简化了计算机内部运算的复杂度。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Git版本控制 01】基本操作

目录 一、初始配置 二、添加文件 三、查看日志 四、修改文件 五、版本回退 六、撤销修改 七、删除文件 一、初始配置 Git版本控制器:记录每次的修改以及版本迭代的一个管理系统。 # 初始化本地仓库:git init(base) [rootlocalhost gitcode]# gi…

Rust开发WASM,WASM Runtime运行

安装wasm runtime curl https://wasmtime.dev/install.sh -sSf | bash 查看wasmtime的安装路径 安装target rustup target add wasm32-wasi 创建测试工程 cargo new wasm_wasi_demo 编译工程 cargo build --target wasm32-wasi 运行 wasmtime ./target/wasm32-wasi/d…

13. UE5 RPG限制Attribute的值的范围以及生成结构体

前面几章,我们实现了通过GameplayEffect对Attribute值的修改,比如血量和蓝量,我们都是有一个最大血量和最大蓝量去限制它的最大值,而且血量和蓝量最小值不会小于零。之前我们是没有实现相关限制的,接下来,我…

JVM-运行时数据区程序计数器

运行时数据区 Java虚拟机在运行Java程序过程中管理的内存区域,称之为运行时数据区。《Java虚拟机规范》中规定了每一部分的作用。 程序计数器的定义 程序计数器(Program Counter Register)也叫PC寄存器,每个线程会通过程序计数器…

LoveWall v2.0Pro社区型校园表白墙源码

校园表白墙,一个接近于社区类型的表白墙,LoveWall。 源码特色; 点赞, 发评论, 发弹幕, 多校区, 分享页, 涉及违禁物等名词进行检测! 安装教程: 环境要求;…

深度学习(14)--x.view()详解

在torch中,常用view()函数来改变tensor的形状 查询官方文档: torch.Tensor.view — PyTorch 2.2 documentationhttps://pytorch.org/docs/stable/generated/torch.Tensor.view.html#torch.Tensor.view示例 1.创建一个4x4的二维数组进行测试 x torch.…

什么是网络渗透,应当如何防护?

什么是网络渗透 网络渗透是攻击者常用的一种攻击手段,也是一种综合的高级攻击技术,同时网络渗透也是安全工作者所研究的一个课题,在他们口中通常被称为"渗透测试(Penetration Test)"。无论是网络渗透(Network Penetration)还是渗透…

Ubuntu20.04更新Cmake版本详解

最近在跑一个融合惯导定位的slam框架ins_eskf_kitti,在框架的安装过程中,需要对从GitHub上克隆下来的glog进行编译。其命令如下: glog: git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. m…

macbook电脑如何永久删除app软件?

在使用MacBook的过程中,我们经常会下载各种App来满足日常的工作和娱乐需求。然而,随着时间的积累,这些App不仅占据了宝贵的硬盘空间,还可能拖慢电脑的运行速度。那么,如何有效地管理和删除这些不再需要的App呢&#xf…

电子电器架构 —— 网关测试脚本分析

电子电器架构 —— 网关测试 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何 消耗你的人和事,多看一眼都是你的不对。非…

C语言指针函数学习2

之前写过一篇指针函数的博文;复习再学习一下; 指针函数,是一个函数,它的返回值是指针类型; 之前写了一个指针函数,返回一个 int * 类型的指针;下面做一个程序,返回一个结构体指针&a…

[Angular 基础] - 自定义事件 自定义属性

[Angular 基础] - 自定义事件 & 自定义属性 之前的笔记: [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上是能够实现渲染静态页面的基础 之前的内容主要学习了怎么通过…

5G NR 频率计算

5G中引入了频率栅格的概念,也就是小区中心频点和SSB的频域位置不能随意配置,必须满足一定规律,主要目的是为了UE能快速的搜索小区;其中三个最重要的概念是Channel raster 、synchronization raster和pointA。 1、Channel raster …

【从Python基础到深度学习】1. 安装Python PyCharm

前言: 为了帮助大家快速入门机器学习-深度学习,从今天起我将用100天的时间将大学本科期间的所学所想分享给大家,和大家共同进步。【从Python基础到深度学习】系列博客中我将从python基础开始通过知识和代码实践结合的方式进行知识的分享和记…

.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)

需求背景: 在需要通过服务端请求传递文件二进制文件流数据到相关的服务端保存时,如对接第三方接口很多情况下都会提供一个上传文件的接口,但是当你直接通过前端Ajax的方式将文件流上传到对方提供的接口的时候往往都会存在跨域的情况&#xff…

详解各种LLM系列|LLaMA 1 模型架构、预训练、部署优化特点总结

作者 | Sunnyyyyy 整理 | NewBeeNLP https://zhuanlan.zhihu.com/p/668698204 后台留言『交流』,加入 NewBee讨论组 LLaMA 是Meta在2023年2月发布的一系列从 7B到 65B 参数的基础语言模型。LLaMA作为第一个向学术界开源的模型,在大模型爆发的时代具有标…

网络分析仪的防护技巧

VNA的一些使用防护技巧,虽不全面,但非常实用: [1] 一定要使用正规接地的三相交流电源线缆进行供电,地线不可悬浮,并且,火线和零线不可反接; [2] 交流供电必须稳定,如220V供电&#x…

如何使用websocket

如何使用websocket 之前看到过一个面试题:吃饭点餐的小程序里,同一桌的用户点餐菜单如何做到的实时同步? 答案就是:使用websocket使数据变动时服务端实时推送消息给其他用户。 最近在我们自己的项目中我也遇到了类似问题&#xf…

网络层DoS

网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,其目的 是实现两个终端系统之间数据的透明传送,具体功能包括:寻址和路由选择、连 接的建立、保持和终止等。位于网络层的协议包括ARP 、IP和ICMP等。下面就 ICMP为例&…

Android13新特性之预测返回手势

Android14新特性之预测返回手势 简介 Android 14引入了对预测性返回手势的支持,这意味着开发者可以通过系统提供的额外动画和API来实现定制化的动画效果。这一更新使得应用程序可以在用户执行返回手势时展示一个动画预览,例如在应用程序前显示Home屏幕…