原码反码补码原理理解

article/2025/9/23 14:50:31

原码反码补码原理理解

  • 基础知识
  • 原码
    • 定义
    • 在这里,我们模仿一下计算机对数据运算的过程!
    • 那么所有运算都是正确的吗?我们再试一组。
  • 反码
    • 定义
    • 在这里,我们模仿一下计算机对数据运算的过程!
    • 正数加负数也没问题了,那负数加负数会出错吗?我们来试一下!
  • 补码
    • 前言
    • 定义
    • 在这里,我们模仿一下计算机对数据运算的过程!
  • 原码反码补码的本质
    • 原码:
    • 反码和补码:

基础知识

说原码反码补码,我不想说他们的定义或者是算法。我只想请诸君随我一同解决一道题。
7 - 3 = ?(均为十进制)
这道题的答案相信各位能脱口而出,但是把这道题放到计算机中,计算机可就犯难了,首先我们计算机需要运算的是二进制数据,其次我们计算机中的运算位却只有加法运算器却没有减法计算器。那我们怎么完成数字的减法呢?

很简单,加上一个减数的相反数就行了。

可是减数(一定是正数)的相反数一定是负数,而负数前面的符号怎么解决呢?这就不得不引入符号位了。

其实原码反码补码本质上就是为了解决计算机在作减法时和引入的符号位之间的问题!

原码

定义

原码就是将一个数转换为二进制,第一位(即最高位)表示这个数的符号,1位负号,0为正号

例如(以带符号位的四位二进制数为例)

3 的原码是0011(其中0代表3是个整数,011代表3的二进制表示)
-3 的原码是1011(其中1代表-3是个负数,011代表3的二进制表示)

在这里,我们模仿一下计算机对数据运算的过程!

1.我们将3和4输入到计算机中进行加法运算,这里我们期望得到的数值为7
2.计算机将3和4分别转换为原码,3变成0011,4变成0100
3.计算机将3和4的原码相加,此时我们运用小学时便学过的方法按位相加
请添加图片描述
4.此时得到的结果与我们预期相吻合!

那么所有运算都是正确的吗?我们再试一组。

1.我们再将3和-3输入到计算机中进行加法运算,这里我们得到的期望数值为0
2.计算机将3和-3分别转换为原码,3变成0011,-3变成1011
3.计算机将3和-3的原码相加
请添加图片描述

4.此时计算机将会得到一个我们意想不到的答案!怎么可能3 + ( - 3 ) = - 6?

别慌,科学家们也意识到这个问题(即正数之间的加法不会出错,而正数和负数相加便会引起莫名其妙的结果),可这个问题该怎么解决呢?
于是便引入了反码!!!

反码

定义

我们知道,正数与正数的原码进行运算是没有问题的,可正数的和其相反数的原码相加便会出错。

例如:0011 + 1011 == 1111 (3 + - 3 = - 7)

所以反码便是为了解决这点(即将正数的相反数的原码与正数的原码相加不等于0)

反码:正数的反码还是原码,负数的反码是原码除了符号位以外,其余位数按位取反

在这里,我们模仿一下计算机对数据运算的过程!

1.我们再将3和-3输入到计算机中进行加法运算,这里我们得到的期望数值为0
2.计算机将3转换为反码,即3变成0011,然后由于-3是负数,计算机将-3的原码按位取反,即-3变成1100
3.计算机将3和-3的反码相加,得到1111(注意此时两个数的反码相加我们得到的也是一个数反码,并且这个数是个负数,我们需要在此将这个负数的反码转换为原码,即把1111除符号位以外按位取反,变成1000,即-0)
4.- 0 = 0,所以我们得到的结果符合我们的预期

我们再尝试一组

1.我们再将3和-5输入到计算机中进行加法运算,这里我们得到的期望数值为-2
2.计算机将3转换为反码,即3变成0011,然后由于-5是负数,计算机将-5的原码按位取反,即-5变成1010
3.计算机将3和-5的反码相加,得到1101(取反转换为原码后为1010即-2)
4.- 2 = - 2,所以我们得到的结果符合我们的预期

正数加负数也没问题了,那负数加负数会出错吗?我们来试一下!

1.我们再将-2和-3输入到计算机中进行加法运算,这里我们得到的期望数值为-5
2.计算机将-2的原码按位取反,即-2变成1101,然后计算机将-3的原码按位取反,即-3变成1100
3.计算机将-2和-3的反码相加,得到1001(取反转换为原码后为1110即-6)
4.- 6 不等于 - 5,所以计算机又出错了!

那么怎么解决呢,其实很简单,负数加负数其实就等于两者的正数相加,然后符号位强制为负号。

也就是说,(- 2 ) + (- 3)= (-)(2 + 3)= - 5

既然2+3不会出错,那么(-)(2 + 3)就不会出错,那么(- 2 )+(- 3 )也就不会出错了。

其实反码已经解决了减法的问题,而且加法的运算原码也能完成。既然如此,那我们课程中学习的补码又有什么用呢?
其实补码才是最难理解的,下面听我细说。

补码

前言

说补码,我不想先说补码的定义或者是算法。还是这道题
7 - 3 = ?(均为十进制)
对于计算机来说,除了计算相反数就没有别的办法了吗?
有的,不知道各位有没有留意到我们最常见的时钟,我们将这道问题转换为一个时钟。请添加图片描述
就像我们日常生活中解决减法问题一样
请添加图片描述

理解了这个再来理解补码就容易得多了。

定义

补码:正数的补码等于它的原码,负数的补码等于反码加一

其实书上也就这句话告诉我们补码怎么计算。我们也不知道为什么负数的补码等于反码加一。而且科学家也不可能随随便便将反码加一定义为补码。只不过补码就正好等于反码加一。接下来我来细致的讲讲负数的补码为什么等于反码加一。

在这里,我们模仿一下计算机对数据运算的过程!

请添加图片描述
这是计算机根据这种思想完成的运算。

如果根据补码计算
请添加图片描述
接下来我们根据教材上教给我们的办法完成
对-3的补码运算:
-3的原码为 1011
-3的反码为 1100
-3的补码为 1101

与我们再上上一张图片中计算得到的0101只有符号位有差别。但我在上上一张图中得到的是一个正数(与-3同余的正数)而我们只需要更改一下符号位便可以得到-3的补码。
接下来我将通过几组数据来验证一下我的猜想:
请添加图片描述

原码反码补码的本质

原码:

原码便于解决两个正数或者两个负数相加的问题,类似于计算机中的加法运算器。

反码和补码:

反码和补码都便于解决正数和正数相减的问题,但两者解决的方式不同。

以正数A减去正数B等于C为例(均为十进制)

反码解决方式
1.首先将减法问题转换为加法问题。
A - B = A + (- B)其中 -B 为B的相反数
2.然后将A的反码加上-B的反码此时得到C的反码
3.将C的反码转换为原码得到C

补码解决方式
1.首先将减法问题转换为加法问题
2.计算机找到一个整数与B同余
3.将计算结果取模


http://chatgpt.dhexx.cn/article/yXU6WVts.shtml

相关文章

java基础-原码反码补码

本文帮助理解,Java中原码反码补码的原理 1:原码反码补码,基础概念和计算方法 对于一个数,计算机需要使用一定的编码方式进行存储。原码反码补码是计算机存储一个具体数字的编码方式。 原码: 第一位表示符号位&…

原码反码补码习题

1、有以下变量求输出结果 signed char c 178; printf("%din",c); printf("%u\n",c); unsigned char d -9; printf("%din".d); printf("%u\n",d); 并写出数据存储和取出的过程 2、求-57的原码、反码、补码 原码&am…

原码、反码、补码

一、前置概念 计算机底层存储数据时使用的是二进制数字,但是计算机在存储一个数字时并不是直接存储该数字对应的二进制数字,而是存储该数字对应二进制数字的补码。所以接下来我们需要来了解一下原码、反码和补码。 那么再了解原码、反码、补码之前&…

原码、反码以及补码

目录 一、概念 二、补码的意义 一、概念 计算机底层存储数据时,存储的是数据对应的二进制数字。对于整型数据,其二进制表示形式有三种,分别是:原码、反码、补码,而实际存储的是整型数据的补码。 原码、反码以及补码…

【软考学习2】数据表示——原码 反码 补码 移码

原码 反码 补码 移码是软考必考的项目,所以需要对其概念、计算方式和取值范围进行总结。 零、使用场景 原码 反码 补码 移码都是计算机中表示数据的方式,各有所长,对于我们来说,都需要加以学习。 软考中最常见的就是一个字节的码…

原码,补码,反码概念和计算方法详解

目录: 原码,补码,反码概念和计算方法详解一、机器数和真数二、原码,反码,补码的基础概念和计算方法三、为何要使用原码,反码和补码四、Example 原码,补码,反码概念和计算方法详解 一、机器数和真数 1、机器数 一个数在计算机中…

原码、反码、补码详解

文章转自: http://c.biancheng.net/ 文章目录 1. 原码2. 反码3. 补码4. 补码到底是如何简化硬件电路的5. 实例分析 1. 原码 将一个整数转换成二进制形式,就是其原码。例如short a 6; a 的原码就是0000 0000 0000 0110;更改 a 的值a -18; 此时 a 的原码…

什么是原码、反码和补码

什么是原码、反码和补码 文章目录 什么是原码、反码和补码1、机器数2、原码3、反码4、补码5、总结 1、机器数 前言 一个数在计算机中的表示形式是二进制的话,这个数其实就叫机器数。 机器数通常是带有符号的(指有正数和负数之分),…

Wi-Fi 破解 (基于WPA2协议)

如今信息安全越来越热门,最近搞大创项目有机会接触到了我们一直谈论的Wi-Fi破解技术,于是整理了一些关于Wi-Fi破解的东西分享给大家,包括一些Wi-Fi的基本知识。希望大家只是拿自己的Wi-Fi做实验,不要“Wi-Fi破解,从入门…

CDLinux破解WPA/WPA2无线网络密码

破解前的准备工作: 1、8187/8187L/3070芯片大功率网卡一块(就是我们俗称的“卡王”) 2、破解软件CDLinux 3、CDLinux下载地址 http://www.syston.es/gratis/system/systonwpa.iso 4.1g的U盘或虚拟机vm 启动虚拟机: 照片名称&a…

使用KALI破解WIFI(wpa/wpa2)密码

前言 本文直接使用kali操作系统进行相关操作,未使用虚拟机,在此不赘述虚拟机配置 正文 1 使用命令iwconfig,确定哪些无线解控是可用的,如图所示,无线网卡名称为wlan0。 2 使用airmon-ng命令监控无线传输&#xff0c…

无线WiFi安全渗透与攻防(十三)之WPA破解-windows下GPU跑包加速

WPA破解-windows下GPU跑包加速 实现GPU加速的前提条件: 英伟达公司 设计的 计算统一设备架构 AMD 设计的 流开放计算库 openCL 通过这两个技术,可以让显卡帮我们进行计算渗透 1.EWSA软件介绍 一个非常不错的网络网络破解工具,可以直接破…

【WLAN】【测试】Linux下aircrack-ng的应用之破解WPA/WPA2、WEP密钥

1、准备工作 a、将网卡设置为monitor模式,在前述博文的抓包方法中有说明,不再赘述; b、准备字典文件wordlists.txt。 2、探测阶段 通过sudo airodump-ng wlan0mon命令探测周边802.11网络的情况: 比如这里,可以看到FC:D7:33:3F:BC:F8的AP下挂了两个STA。 根据扫描的情况…

简单用BT3破解无线网络WEP, WPA密码

最近在网上看到一篇帖子,《网上风行"无线蹭网"秘笈 破解密码只需10分钟 》, 看完后,心里一直痒痒,迫不及待的上网搜索了起来。看来自从离开黑鹰之后,咱这"黑"心还是存在的。网上搜索了下&#xff…

BackTrack5 (BT5)无线密码破解教程之WPA/WPA2-PSK型无线密码破解

昨天发布了BackTrack5 (BT5)无线wep密码破解教程之minidwep-gtk破解法一文,对BT5下破解wep无线密码的简单方法做了介绍,今天奶牛为朋友们介绍下如何在bt5下破解wpa wpa2类型的无线密码。 前提:安装或者硬盘引导了BT5的gnome32位镜像&#xff…

破解WPA2-PSK加密

● WPA/WPA2与WPA/WPA2- PSK的区别 使用Aircrack-ng抓取WPA2-PSK握手包 ● 使用EWSA破解密码 WPA/WPA2与WPA/WPA2-PSK的区别 .WPA/WPA2 WPA/WPA2是一种比WEP强壮的加密算法,挑选这种安全类型,路由器将选用Radius服务器进 行身份认证并得到密钥的WPA或WPA2安全形式。…

*WiFi无线渗透 WPA2-PSK密码破解笔记*

WiFi无线渗透 WPA2-PSK密码破解笔记 WPA/WPA2: > WPA/WPA2是一种比WEP强壮的加密算法,挑选这种安全类型,路由器将选用Radius服务器进行身份认证并得到密钥的WPA或WPA2安全形式。因为要架起一台专用的认证服务器,价值对比贵重且…

U盘制作“奶瓶”破解无线WPE\WPA\WPA2 密码教程

奶瓶这个系统,相信玩无线的朋友应该都会知道。这是一款基于 Tiny Core Linux 搭建的无线网络安全测试系统,当然由于它是用来安全测试的系统,因此在安全方面自然有着强大的功能。而且,这个系统非常简便易学,因此现在已经…

MacOS破解WiFi(WPA、WPA2)

2020年的寒假过得属实弟弟 我在家里默默地刷安全牛的教程,最新刷到了“无线攻击”这一章,虽然在学校的机器上安装了Kali虚机,但是没有Usb无线网卡。于是用MacBook尝试了一下。 PS: 本文参考了网络上众多的文章,但是有我…

wpa或者wpa2暴力破解WiFi

现在看看其实很多渗透测试的时候你需要在内网的情况下进行测试。那既然是内网,你得必须混进内网的网络中去对吧。那么WiFi的破解就是第一个突破口了,当然企业级的WiFi不一样哈,但是家用的完全可以了哈。当然,其实不只这种攻击哈。…