什么是原码、反码和补码

article/2025/9/23 14:56:56

什么是原码、反码和补码

文章目录

  • 什么是原码、反码和补码
  • 1、机器数
  • 2、原码
  • 3、反码
  • 4、补码
  • 5、总结

1、机器数

前言

一个数在计算机中的表示形式是二进制的话,这个数其实就叫机器数。

机器数

机器数通常是带有符号的(指有正数和负数之分),计算机用最高位存放符号,这个 bit 一般叫做符号位。 正数的符号位为 0, 负数的符号位为 1。比如,十进制中的数 +7 ,计算机字长为8位,转换成二进制就是 0 0 0 0 0 1 1 1一个 byte 有 8bit,有效的取值范围是 -128 ~ +127)。

如果是 -7 ,就是 1 0 0 0 0 1 1 1 。一个存储的二进制码分原码、反码、补码,下面我们就来介绍一下什么是原码、反码、补码

Notes

计算机底层使用二进制形式的补码来计算和存储数据

2、原码

定义

十进制数据的二进制表现形式就是原码,原码最左边的一个数字就是符号位,0为正,1为负。

例如:56 -> 0 0 1 1 1 0 0 0

左边第一位为符号位,其他位为数据位。

一个 byte 有 8bit,最大值是 0 1 1 1 1 1 1 1 (+127),最小值是 1 1 1 1 1 1 1 1 (-127)

在计算机中之所以使用二进制来表示原码是因为逻辑简单,对于电路来说只有开或者关两种状态,用二进制是在方便不过的了。如果使用的进制是十进制、八进制或者十六进制的话,电路没有办法表示那么多的状态

  • 正数计算

使用原码对正数进行计算不会有任何问题的

例如:5 + 2

 0 0 0 0 0 1 0 1
+        0 0 1 0
-----------------0 0 0 0 0 1 1 1

把这个结果转成十进制刚好就等于 7,完全正确无误

  • 负数计算

但是如果是负数的话,那计算的结果就会大相径庭了

我们拿 -56 这个数字来举例,它的原码是 1 0 1 1 1 0 0 0 ,减一之后,就会变成 1 0 1 1 0 1 1 1 ,这个数转成十进制就是 -55。计算前是 -56,减一之后正确的结果应该是 -57(1 0 1 1 1 0 0 1)才对,居然还越减越大了

 1 0 1 1 1 0 0 0
-              1
-----------------1 0 1 1 0 1 1 1

原码计算负数

为了解决原码不能用于计算负数的这种问题,这时候,反码它出现了,作为负数的“计算的救星”。

计算规则是正数的反码不变和原码一致,负数的反码会在原码的基础上,高位的符号位不变,其他位取反( 1 变成 0 , 0 变为 1 )。

3、反码

定义

正数的反码是其本身(等于原码),负数的反码是符号位保持不变,其余位取反。 反码的存在是为了正确计算负数,因为原码不能用于计算负数

十进制数字原码反码
+00000 00000000 0000
-01000 00001111 1111
-11000 00011111 1110
-21000 00101111 1101
-31000 00111111 1100
-41000 01001111 1011
-51000 01011111 1010
-61000 01101111 1001
-71000 01111111 1000
  • 负数计算

这时候,我们再来使用反码计算一下 -56 - 1 的结果

-56 的原码是 1 0 1 1 1 0 0 0 ,如果转成反码(符号位不变,其他位取反),

那么它的反码就是 1 1 0 0 0 1 1 1

  1 1 0 0 0 1 1 1-              1
-----------------1 1 0 0 0 1 1 0

反码计算负数

-56 -1 = -57,-57 的原码是 1 0 1 1 1 0 0 1,转成反码刚好是 1 1 0 0 0 1 1 0,刚好等于刚才我们算出的值

  • 跨零计算

不过反码也有它的 “ 软肋 ”,如果是负数跨零进行计算的话,计算得出的结果不对

我们拿 -3 + 5 来举例

-3 的原码是 1 0 0 0 0 0 1 1,转成反码的话就是 1 1 1 1 1 1 0 0

 1 1 1 1 1 1 0 0
+        0 1 0 1  
-----------------0 0 0 0 0 0 0 1 

反码计算跨零

把计算结果转成十进制就是 1,这结果显然不对。那么我们该怎么计算呢,这时候,作为反码的补充编码 —— 补码就出现了。

4、补码

定义

正数的补码是其本身,负数的补码等于其反码 +1。因为反码不能解决负数跨零(类似于 -6 + 7)的问题,所以补码出现了。

十进制数字原码反码补码
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000
-11000 00011111 11101111 1111
-21000 00101111 11011111 1110
-31000 00111111 11001111 1101
-41000 01001111 10111111 1100
-51000 01011111 10101111 1011
-61000 01101111 10011111 1010
-71000 01111111 10001111 1001
-1271111 11111000 00001000 0001
-1281000 0000
  • 跨零计算

这时候,我们再来使用反码计算一下 -3 + 5 的结果

-3 的原码是 1 0 0 0 0 0 1 1,转成反码的话就是 1 1 1 1 1 1 0 0,再转成补码就是 1 1 1 1 1 1 0 1

 1 1 1 1 1 1 0 1
+        0 1 0 1
----------------- 0 0 0 0 0 0 1 0

把这个数转成十进制刚好等于2,结果正确

5、总结

在计算机当中都是使用补码来进行计算和存储的。补码很好的解决了反码负数不能跨零计算的弊端,并且补码还可以记录一个特殊的值 -128,这个数据在 1 个字节下是没有原码和反码

学习了原码、反码和补码的知识之后,我们就可以了解到,Java 当中所有的基本数据类型。比如整数类型的数据类型,存储的数都是同样的,区别是在于什么地方,假设存储的值都是 10

基本数据类型字节数内存中实际存储的值
byte1010000 1010
short1020000 0000 0000 1010
int1040000 0000 0000 0000 0000 0000 0000 1010
long1080000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010

从上表中我们可以得出一个结论,为了凑齐字节数,所占的字节越大,则前面补的零越多。

类型转换原理

  • 隐式类型转换
public class Test {public static void main(String[] args) {// 小的数据类型往大的数据类型进行转换底层就是通过左补零完成的byte a = 10; // 0000 1010int b = a;	 // 0000 0000 0000 0000 0000 0000 0000 1010System.out.println(b);}
}
  • 强制类型转换
public class Test {public static void main(String[] args) {int a = 300;	   		// 0000 0000 0000 0000 0000 0001 0010 1100byte b = (byte) a; 		// 0010 1100System.out.println(b);	// 打印出44/*int a = 200;	  		// 0000 0000 0000 0000 0000 0000 1100 1000byte b = (byte)a; 		// 1100 1000System.out.println(b);	// 打印出-56*/}
}

补码的运算也适用于逻辑运算符

运算符含义运算规则
&逻辑与0为false,1为true,当都为1时才为true
|逻辑或0为false,1为true,当有至少一个为1时为true,如果都没有则为false
<<左移向左移动,低位补零
>>右移向右移动,高位补零,符号位按照原来数字的符号位不变
>>>无符号右移向右移动,高位补零

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

相关文章

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

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

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

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

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

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

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

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

【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密码

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

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

昨天发布了BackTrack5 (BT5)无线wep密码破解教程之minidwep-gtk破解法一文&#xff0c;对BT5下破解wep无线密码的简单方法做了介绍&#xff0c;今天奶牛为朋友们介绍下如何在bt5下破解wpa wpa2类型的无线密码。 前提&#xff1a;安装或者硬盘引导了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强壮的加密算法&#xff0c;挑选这种安全类型,路由器将选用Radius服务器进 行身份认证并得到密钥的WPA或WPA2安全形式。…

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

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

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

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

MacOS破解WiFi(WPA、WPA2)

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

wpa或者wpa2暴力破解WiFi

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

无线安全WLAN WEP破解(一)

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

【Kali】WPA / WPA2破解

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

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

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

利用PIN码破解wifi密码(WPA2-PSK)

無奈宿舍無線網絡實在太差&#xff0c;校園網連個QQ都登錄不上&#xff0c;看到XX地方的信號居然是滿格&#xff0c;難免想讓我做一次網絡安全方面的實驗。聲明下&#xff0c;僅僅是實驗而已&#xff0c;禁用於非法目的。 首先&#xff0c;亂扯一些東西&#xff0c;看看就好&a…

【无线网络渗透 】如何使用Aircrack-ng 系列工具进行WPA/WPA2的监听和破解

版权声明&#xff1a;本文为博主tonyzhejiang原创文章&#xff0c;转载请注明来源博客&#xff1a;http://blog.csdn.net/tonyzhejiang) 目录&#xff1a; 前言什么是 Aircrack-ng所需工具参数介绍破解步骤帮助 1.前言 1.1 声明 注意&#xff1a;本文章是审核家庭无线路…

从零开始,教你如何破解WEP、WPA无线网络(完整版)

第一章、引言 近些年无线技术 发展迅速&#xff0c;越来越多的用户开始使用无线网络&#xff0c;最近新搬到一小区没有安装网络&#xff0c;后面想到以前出差时在机场用过无线网络&#xff0c;小区内是否也有无线网络呢&#xff1f;随便一搜&#xff0c;果然有几个无线网…

教你如何破解你家附近的wep wpa wpa2加密方式的密码~~~转的懒得写了。

来源&#xff1a; 童嘉旻◆Kevin的日志 首先申明一点 此行为只是为了大家交流和保护自己无限路由器安全。 但是必须是BT4,5所支持网卡。我的网卡是Realtek USB8187. 自己网卡能否支持请在网上查阅。还有我的这个BT5是英文版本&#xff0c;如果你们是中文版请对号入座&#x…

无线网络密码破解WPA/WPA2教程(包教包会)

在动手破解WPA/WPA2前&#xff0c;应该先了解一下基础知识&#xff0c;本文适合新手阅读 首先大家要明白一种数学运算&#xff0c;它叫做哈希算法&#xff08;hash&#xff09;&#xff0c;这是一种不可逆运算&#xff0c;你不能通过运算结果来求解出原来的未知数是多少&#…