深入浅出:原码,反码,补码及减法

为什么要有原码、反码、补码和移码 反码跨 0 计算总是会和预期结果存在 1 的偏差,这个偏差是由于反码多一个 -0 而导致的,解决方法其实很简单,把整个反码向下移一位,也就是消除 -0 这一位, 规定 -1 的补码为 1111 1111,也就是常说的负数的补码是反码加1(所以这个加1并不是无厘头规定非要加1),而正数原码没有任何计算问题,所以正数的补码依然和原码相同。了,这是因为存在 0 和 -0,而 0 和 -0 是一样的,但占据了一位反码的空间,为解决这个问题,引出了补码的概念。(表示分母是2的幂的浮点数可以完美表示) 阅读详情

众所周知(我不说大家也知道),计算机内部是以二进制存储数据的,对于不同的数据类型可能存储的格式含义不一样。例如有符号整数,最高位是符号位,其余代表数值;那么它在计算机里要怎么运算表达呢,我们下面来一步步说一下

 

  1. 举个例子,1+1怎么表达呢?

1的二进制表达为(为了方便用1个字节表示):00000001

那么1+1即表达为:00000001 + 00000001 = 00000010 = 2

是吧,这样子是对的,so easy。

 

2. 再接着看下面,2-1怎么表达呢?

2的二进制为:00000010

-1的二进制为:10000001

那么:2-1=2+(-1)=00000010+10000001=10000011=-3

等等!怎么不是1呢?这不是我认识的减法啊!

其实呢,是因为计算机在计算过程中并不是用我们认识的二进制来表达运算的。

我们认识直接转换的二进制呢,是称为:原码。

计算机内部采用补码来计算的。我们先来说什么说原码和补码吧

 

3. 什么是原码

维基百科的定义:原码(True form)是电脑运算的名词,是指“未经更改”的码。例如上面举的例子,2的二进制表达为00000010,00000010即是原码。

 

4. 什么是补码

维基百科的定义:补码(英语:2's complement)是一种用二进制表示有号数的方法。

补码是根据原码规则计算而来的:

正数和0的补码:该数字本身。

负数的补码:将其除最高位(即符号位)取反再加1得出的。

那么什么是取反,0变成1,1变成0就是取码了。

举个例子,-1,原码是:10000001

第一步,除最高位取反,得到:11111110

第二步,加1:11111111

最后-1的补码即为:11111111

对了,在转换补码的过程中,还有步骤:取反。取反得出来的数,称为反码。

 

5. 什么是反码

反码是一种在计算机中数的机器码表示。对于单个数值(二进制的0和1)而言,对其进行取反操作就是将0变为1,1变为0

反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。

反码是在原码和补码转换过程中过渡的一种运算而已。知道了原码和补码的转换,其实也就知道什么是反码了,只是把它抽象出来了。

 

6. 减法到底是怎么做呢?

说完了原码,反码和补码,回到最开始的问题,到底怎么运算才对啊?个位数都算错可丢人了。

计算机内部采用补码来计算的。

i. 首先我们要把需要计算的转换成补码

2的原码是:00000010,由于是正数,补码即为本身:00000010。

-1的原码是:10000001,由于是负数,补码为:11111111

ii. 计算机内部是采用补码加法,统一了运算规则。例如把2-1看成是:2+(-1)。于是2-1实际为:

00000010 + 11111111 = 00000001 = 1

iii. 最终计算结果是正常的,对得起学过的小学数学了。

 

7. 究极原因:为什么非要补码?

在我阅读和思考的时候,很多思想是通过时钟循环来表达其本质。

我个人理解为公式的变换,相对容易理解。怎么说呢?我们推导一下下面的公式。

10-8=10+(-8)=10+(-1-8)+1=10+[(-1-8)+1]

来到这里,我们停一下。这个公式推导过来是等价的,看看方括号里面是不是和计算机内部计算取反+1很相似?

-1是二进制是:11111111,-8的原码是:10001000,反码是:11110111,(-1-8)除开高位的运算为:1111111-0001000=1110111,结合高位即为:11110111,即就是取反的结果,亦即(-1-8)的结果。

方括号里的实质即是[(取反)+1]=[补码],这就是为什么可以使用补码计算了。这个原因纯粹个人理解分析,为了更好的理解补码运算,希望也能帮助到你。

从零配置华为S5720交换机VLAN:Web界面与命令行双模式详解(附拓扑图) 本文详细解析华为S5720交换机VLAN配置的全过程,涵盖Web界面与命令行(CLI)双模式操作指南。从基础环境准备到多交换机环境配置同步,特别针对S5720-52X系列交换机的VLANif接口、端口分配策略及交换机堆叠技术进行深入讲解,并附实用拓扑图与配置示例,助力企业网络管理员高效完成VLAN部署。 阅读详情

相关推荐

健康保险费用预测:可解释机器学习在精算建模中的实战落地

健康保险费用预测是医疗AI与保险科技交叉领域的核心任务,本质是基于临床变量与社会因素对个体医疗支出进行风险量化。其技术原理需兼顾统计建模能力与监管可解释性,XGBoost+SHAP组合因支持特征归因、边际效应分析和临床可干预推演,成为保险精算场景的主流选择。该技术显著提升保费定价精度、降低偿付风险,并支撑DRG费用预警、团险核保辅助及再保险尾部风险评估等关键应用。本文聚焦真实产线中的时间序列验证、临床分层特征工程与监管红线指标(如Bias@90th、Calibration Slope),深入解析如何让模型不

weixin_33702545的博客 306

原码、反码、补码运算

由于计算机的二进制原理,计算机只能识别0、1组合成的二进制数字,不管给计算机下达什么指令,最终都要翻译成一连串0或1的组合。所以这些二进制之间的运算也要通过一系列的规则与表达方式进行,这些运算表达方式包括原码、反码和补码,本博客按照逻辑顺序进行论述。

m0_51660523的博客 4441

wifi/BT芯片RTL8723DS驱动移植和测试之一wifi篇

本文主要介绍如何在stm32mp157中移植并测试芯片RTL8723DS的wifi功能。

汉尼拔勇闯天涯 8739

程序是怎样跑起来的要点整理2(第二章 数据是用二进制表示的)

计算机所处理的信息的基本单位是字节(8bit)。字节是最基本的信息计量单位。位是最小单位,字节是基本单位。内存和磁盘都使用字节来存取与读写数据,使用位单位是无法访问的,因此字节是基本单位。 程序在运行是计算机内部是用二进制数来表示的。 计算机不区分二进制数,怎么解读由程序员说了算。比如“00100111”的二进制数,可以解读为纯粹的数值,也可以解读为单引号,也可以解读为方框图标等等。 位权的概念: 比如:39中 :3表示310 9表示91; 这里的10 和 1就是位权。这个数的第一位(从右边开始数)的位权是

Naunyang的博客 403

自回归分布滞后模型 (ARDL)及 Stata 具体操作步骤

例如,Bahmani-Oskooee 和 Brooks(1999)研究了汇率波动与贸易收支之间的关系,发现汇率的变动在长期和短期内对贸易收支的影响存在差异,ARDL 模型能够有效地捕捉这种复杂的关系。它结合了自回归(Autoregressive,AR)模型和分布滞后(Distributed Lag,DL)模型的特点,能够同时考察变量之间的短期和长期关系。假设我们收集了一段时间内的居民消费和可支配收入数据,通过对这些数据进行分析和估计,可以得到模型的参数估计值,从而揭示消费与收入之间的短期和长期关系。

a519573917的博客 6093

AI视频生成本地搭建图文详细过程

在自己的电脑上搭建一个AI,主要用于通过自己输入的关键字来自动生成视频文案,把视频文案自动生成视频,再自动给视频配音配字幕。

张小三的博客 4691

原码,补码,反码的计算和原理分析

其实,说起原码,补码,反码的关系,大家都会想起这样一句话:“反码是原码除符号位其余全部取反,补码是反码加1。“真的是这样简单吗,今天我们就来探讨一下! 1.正数原码、补码、反码的计算 例如:+1的原码:00000001 +1的反码:00000001 +1的补码:00000001 由此,我们可以发现,正数的原码,补码,反码是一样的。 2.负数原码、补码、反码的计算 例如:-1的原码:10000001...

sinat_42439713的博客 5546

rk3568 点亮双LVDS 屏

承接文章《rk3568点亮LCD(lvds)》中仅仅只能使用亮单LVDS;经过厂商的努力,陆续发布新补丁。目前支持双lvds显示,缺憾是需要自己额外移植相关补丁。受限于通信频率和VOP编码能力,支持最大分辨仍然是1920x1080、60fps。

weixin_35723192的博客 3007

原码 反码 换算工具 补码_深入浅出:原码,反码,补码及减法

众所周知(我不说大家也知道),计算机内部是以二进制存储数据的,对于不同的数据类型可能存储的格式含义不一样。例如有符号整数,最高位是符号位,其余代表数值;那么它在计算机里要怎么运算表达呢,我们下面来一步步说一下举个例子,1+1怎么表达呢?1的二进制表达为(为了方便用1个字节表示):00000001那么1+1即表达为:00000001 + 00000001 = 00000010 = 2是吧,这样子是对...

weixin_39571749的博客 369

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 343

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 581

原码的定义公式怎么理解_深入浅出:原码,反码,补码及减法

众所周知(我不说大家也知道),计算机内部是以二进制存储数据的,对于不同的数据类型可能存储的格式含义不一样。例如有符号整数,最高位是符号位,其余代表数值;那么它在计算机里要怎么运算表达呢,我们下面来一步步说一下举个例子,1+1怎么表达呢?1的二进制表达为(为了方便用1个字节表示):00000001那么1+1即表达为:00000001 + 00000001 = 00000010 = 2是吧,这样子是对...

weixin_39819974的博客 559

YOLOv11改进 - C3k2融合 | C3k2融合融合WDBB宽度多样分支模块(Width Diverse Branch Block)通过多尺度分支增强特征表征能力

本文着眼于灰度图像目标检测所面临的挑战,提出了增强型目标检测网络 YOLO - MIF,该网络整合了多种多信息融合策略以对 YOLOv8 网络进行改进。文章开篇介绍了一种可创建伪多通道灰度图像的技术,此技术能增加网络的通道信息,同时缓解潜在的图像噪声与虚焦模糊问题。随后运用网络结构重新参数化技术,在不增加推断时间的情况下提升网络的检测性能。此外,引入了一种新颖的解耦式检测头,增强了模型处理灰度图像时的表现能力。

魔改工程师的博客 770

原码, 反码, 补码 详解

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33763244的博客 78

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深入浅出之原码、反码、补码

我平时看JDK源码,遇到过很多位移运算,因为对位运算理解不深,严重影响了对JDK源码的理解,因此特意恶补了一下计算机组成原理的相关知识,这篇从计算机的原码、反码、补码开始讲起……

千里之行,始于足下 2088

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

原码反码补码原理理解

原码反码补码原理理解基础知识原码三级目录 基础知识 在开始学习原码反码补码之前有没有注意到一个问题 我们计算机中的运算位却只有加法运算器却没有减法计算器。那我们怎么完成数字的减法呢? 很简单,加上一个减数的相反数就行了。 可是减数(一定是正数)的相反数一定是负数,而负数前面的符号怎么解决呢?这就不得不引入符号位了。 其实原码反码补码本质上就是为了解决计算机在作减法时和引入的符号位之间的问题! 原码 原码就是将一个数转换为二进制,第一位(即最高位)表示这个数的符号,1位负号,0为正号 例如(以带符号位

qq_50938817的博客 3798

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

原码、反码、补码(转载)

摘自:https://blog.youkuaiyun.com/zhiwen_a/article/details/81192087 供于方便学习 本文从原码讲起。通过简述原码,反码和补码存在的作用,加深对补码的认识。力争让你对补码的概念不再局限于:负数的补码等于反码加一。 接触过计算机或电子信息相关课程的同学,应该都或多或少看过补码这哥仨。每次都是在课本的最前几页,来上这么一段:什么反码是原码除符号位,按位取反...

qq_44972915的博客 1157

原码、反码、和补码

(二)原码 原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。 若以带符号位的四位二进值数为例 1010 : 最高位为‘1’,表示这是一个负数,其他三位为‘010’, 即(0*2^2)+(1*2^1)+(0*2^0)=2(‘^’表示幂运算符) 所以1010表示十进制数(-2)。 下图给出...

你还可以在努力一点 903

计算机中的原码,反码,补码的理解总结

概念: 简述: Everybody Kown,计算机历史上有两位很重要的人物,第一位是计算机科学奠基人(Alan Mathison Turing) 阿伦·图灵 ,他在计算机科学方面的贡献主要有两个,一是建立图灵机(Turing Machine,TM)模型,奠定了可计算理论的基础;二是提出了图灵测试(Turing Test),阐述了机器智能的概念……(计算机里面最高的奖项就是图灵奖,每年颁发给在计算机科学领域做出杰出贡献的人才,被誉为计算机业界和学术界的诺贝尔奖),第二位则是被称为现代计算机之父的美籍匈牙利

随手记记,加深印象。 1840

原码,反码,补码杂谈

你也许会说,现实世界中所有的减法也可以当成加法的,减去一个数,可以看作加上这个数的相反数。在原码,反码表示法中,我们把减法化为加法的思维是减去一个数,等于加上一个数的相反数,结果发现引入了符号位,却因为符号位造成了各种意向不到的问题。OK,原码,反码,补码之旅就到这里结束。然后说负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。

#elseif 1007

原码,反码,补码和进制的那些事

源码,反码,补码是计算机中比较原理和底层的知识,理解他们有助于未来更好的编程工作,我们今天就来聊聊那些不太费脑但是非常重要的知识–原码,反码,补码。 原码,反码,补码的讲解 首先我们先了解原码是什么? 原码是是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。 反码通...

周将的博客 972

原码,反码,补码

原码,反码,补码         本文从原码讲起。通过简述原码,反码和补码存在的作用,加深对补码的认识。力争让你对补码的概念不再局限于:负数的补码等于反码加一。 接触过计算机或电子信息相关课程的同学,应该都或多或少看过补码这哥仨。每次都是在课本的最前几页,来上这么一段:什么反码是原码除符

weixin_39047815的博客 668

原码 补码 反码

/最近在重新学习一遍C语言,以更加深入的理解C语言,为C++打下比较坚实的基础。此次学习主要依据的书籍依然为《C Primer plus》中文版 第五版。至此,我创建了C/C++这一个分类,用以记录学习C/C++的过程,不断提高自己。/ 在前面的两章的学习中,并未遇到很大的问题。其中的一个就是关于变量,变量名,声明,定义,初始化等的相关基础知识,这点会在下一篇的文章中进行讲解。目前遇到的问...

weixin_43948683的博客 226

[Java教程]9.二进制,位运算,原码,反码,补码

Java教程专栏:https://blog.youkuaiyun.com/qq_41806966/category_9929686.html 这一篇将会了解一下计算机底层,二进制. 二进制 什么是二进制? 二进制是计算技术中广泛采用的一种数制 我们通常使用的都是十进制,也就是逢 10 进 1,那么二进制自然就是 逢 2 进 1. 十进制的每一位只能为 0,1,2...9, 二进制的每一位 只能是0 或1, 计算机底层计算使用的是二进制(没有学过二进制,数学比较差可能理解比较难) 也就是说,我...

砷碲 - Shendi 8242

原码 反码 补码

原码 反码 补码 今天看了计组中的数据表示,对于原码反码补码这三兄弟晕头转向,看了看网上的各种讲解,特此写一篇博客来阐释我对这三者的理解。 本文从原码讲起。通过简述原码,反码和补码存在的作用,加深对补码的认识。力争让你对补码的概念不再局限于:负数的补码等于反码加一。 (一)预备知识 认识二进制,十六进制。会二进制与十进制的相互转化运算 由计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储。 根据冯诺依曼提出的经典计算机体系结构框架。一台计算机由运算器,控制器,存储器,输入和输出设备组成

Wxc的Blog 373
上一篇: 浅谈 -128的原码 反码 补码
下一篇: 非对称加密算法--RSA加密原理
ArtisticProgramming
博客等级 码龄8年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值