原码、反码、补码

article/2025/9/23 14:52:01

一、前置概念

        计算机底层存储数据时使用的是二进制数字,但是计算机在存储一个数字时并不是直接存储该数字对应的二进制数字,而是存储该数字对应二进制数字的补码。所以接下来我们需要来了解一下原码反码补码

那么再了解原码、反码、补码之前,我们要了解机器数真值的概念:

        机器数:一个数在计算机的存储形式是二进制数,我们称这些二进制数为机器数,机器数是有符号,在计算机中用机器数的最高位存放符号位,0表示正数,1表示负数

        真值:因为机器数带有符号位,所以机器数的形式值不等于其真实表示的值(真值),以机器数1000 0001为例,其真正表示的值(首位为符号位)为-1,而形式值(首位就是代表1)为129;因此将带符号的机器数的真正表示的值称为机器数的真值。

二、原码、反码、补码介绍

1、原码

原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值,例如的十进制的的正负1,用8位二进制的原码表示如下:

【+1】= 原:[ 0000 0001 ]

【-1】= 原:[ 1000 0001 ]

2、反码

反码的表示方法为:

  • 正数的反码是其原码本身。
  • 负数的反码是在其原码的基础上,符号位不变,其余各位取反。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ]

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ]

3、补码

补码的表示方法为:

  • 正数的补码是其原码本身。
  • 负数的补码是在其原码的基础上,符号位不变,其余各位取反后加1(即在反码的基础上加1)。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ] = 补:[ 0000 0001 ]

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ] = 补:[ 1111 1111 ]

三、 数据在计算机中的存储形式

        计算机实际只存储补码所以原码转换为补码的过程,也可以理解为数据存储到计算机内存中的过程:

         在原、反、补码中,正数的表示是一模一样的,而负数的表示是不相同的,所以对于负数的补码来说,我们是不能直接用进制转换将其转换为十进制数值的,因为这样是得不到计算机真正存储的十进制数的,所以应该将其转换为原码后,再将转换得到的原码进行进制转换为十进制数(机器数包含符号位

四、为何使用原码、反码、补码

        我们上面说过,原码、反码、补码的表示对于正数来说都是一样的,而对于负数来说,三种码的表示确是完全不同的,那大家是否会有个疑问:如果原码才是我们人类可以识别并用于直接计算的表示方式,那为什么还会有反码和补码?计算机直接存储原码不就完事了?

在解决这些问题前,我们先来了解计算机的底层概念,我们人脑可以很轻松的知道机器数的第一位是符号位,但对于计算机基础电路设计来说判别第一位是符号位是非常难和复杂的事情,为了让计算机底层设计更加简单,人们开始探索将符号位参与运算,并且采用只保留加法的方法,我们知道减去一个数,等于加上这个数的负数,即:1-1 = 1 + (-1) = 0,这样让计算机运算就更加简单了,并且也让符号位参与到运算中去

五、原码、补码、反码演进的过程

提醒:前提是已经完全掌握上面的原码、反码、补码介绍

1.使用原码运算

计算十进制表达式:1-1 = 0;

1 - 1 = 1 + (-1)

= 原:[ 0000 0001 ] + 原:[ 1000 0001 ]

= 原:[ 1000 0010 ] = -2

结论:如果用原码表示,让符号位也参与计算,对于减法来说,结果是不正确的。这也是计算机内部在存储数据时不使用原码的原因,为了解决这一问题,出现了反码。

2.使用反码运算

计算十进制表达式:1-1 = 0

1 - 1 = 1 + (-1)

= 原:[ 0000 0001 ] + 原:[ 1000 0001 ]

= 反:[ 0000 0001 ] + 反:[ 1111 1110 ]

= 反:[ 1111 1111 ] = 原: [ 1000 0000 ] = -0

结论:通过计算我们发现用反码计算减法,结果的真值部分是正确的。而唯一的问题出现在"0"这个特殊的数值上,虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的,而且会有[0000 0000]原和[1000 0000]原两个编码表示0。为了解决这一问题,出现了补码。

3.使用补码运算

1 - 1 = 1 + (-1)

= 原:[ 0000 0001 ] + 原:[ 1000 0001 ]

= 补:[ 0000 0001 ] + 补:[ 1111 1111 ]

= 补: [ 0000 0000 ] = 原: [ 0000 0000 ] = 0

结论:这样0用[0000 0000]表示,而以前出现问题的-0则不存在了,而且人们还发现可以用[1000 0000]表示-128,-128的推算过程如下

(-1) + (-127) = -128

= 原:[1000 0001] + 原:[ 1111 1111 ]

= 补:[ 1111 1111 ] + 补:[ 1000 0001 ]

= 补:[ 1000 0000 ]

注意因为实际上是使用以前的-0的补码来表示-128,所以-128并没有原码和反码表示,只要补码是[1000 0000],其十进制数值就为-128。 

演进总结:

        因为补码能多存储一个-128,而且在计算机底层中存储的是补码,所以在计算机中一个8位的二进制数的存储范围是用补码表示的[-128,127],而不是用原码或反码表示的[-127,127]。这也可以解释为什么计算机中一个字节的取值范围是[-128,127]。

        最后也能够回答我们开始提出的问题了,原码、反码、补码的使用,是人们为了让符号位能参与运算并让计算机底层运算更加简单而设计出来的数据存储表示方式。

五、总结(牢记)

  1. 在计算机中,二进制的最高位(左边第一位)是符号位:0表示正数,1表示负数(口诀:0转90°还是0,1转90°就是 —)
  2. 正数的原码、反码、补码都一样(三码合一)
  3. 负数的反码 = 它的符号位不变,其它位取反(0转1,1转0)
  4. 负数的补码 = 它的反码+1;负数的反码 = 它的补码 -1
  5. 0的反码、补码都是0
  6. 在java中都是有符号的(区分正数和负数)
  7. 在计算机运算时,都是以补码的方式来运算的
  8. 当我们看到的运算结果,要看它的原码

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

相关文章

原码、反码以及补码

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

【软考学习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不一样哈,但是家用的完全可以了哈。当然,其实不只这种攻击哈。…

无线安全WLAN WEP破解(一)

WEP加密破解 一. 接入无线网卡 点击可移动设备,选择连接我们的无线网卡设备。 二、开启无线网卡,在特定的AP频道开启监控模式 是将网卡开启成monitor模式. monitor模式可以使网卡监听任何一个数据包. 正常情况下, 我们只能接收到发送给我们…

【Kali】WPA / WPA2破解

文章目录 WPA / WPA2简介攻击WPA使用Aircrack-ng进行WPA破解用Cowpatty进行WPA破解使用GPU进行WPA破解PyritOclHashcatWifite WPA / WPA2简介 WPA / WPA2是Wi-Fi联盟开发的两个不同版本的安全协议,用以替代WEP作为802.11协议的安全标准。 WPA协议于2003年首次发布&a…

使用AirCrack破解wifi密码(wpa/wpa2)

本文使用的是Kali Linux,该系统主要以渗透测试及’破解wifi密码’闻名。 如果你使用Macbook,看这里:使用macbook破解WPA/WPA2 wifi密码 要求: 安装有Kali Linux的计算机支持监控模式的网卡,笔记本电脑一般都支持字典…