java基础-原码反码补码

article/2025/9/23 14:51:33

本文帮助理解,Java中原码反码补码的原理

1:原码反码补码,基础概念和计算方法

对于一个数,计算机需要使用一定的编码方式进行存储。原码反码补码是计算机存储一个具体数字的编码方式。

原码:

第一位表示符号位,其余位表示真值

[+1]原 = 0000 0001

[-1]原  = 1000 0001

反码:

正数的反码跟原码相等

反码计算:在符号位不变的基础上,其余各位取反

 

补码:

正数的补码跟原码相等

补码计算:在反码的基础上,最后加1

 

2:为什么要使用原码反码补码

1:利用反码和补码能将符号位带入计算(简化计算机门电路的设计,利用加法运算代替减法运算 1 - 1 = 1 + (-1) )

// 利用反码进行计算

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

 

// 利用补码进行计算,可以解决反码中的 -0的问题

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原

2:意外收获,利用补码进行计算 ,可以表示 -128(注意:-128没有反码和原码表示)

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补

       因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-2^31, 2^31 - 1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.

 

3:理解一些现象

利用补码来进行计算,可以推算出下面的等式成立

Integer.MAX_VALUE + 1 = Integer.MIN_VALUE   
Integer.MIN_VALUE - 1 = Iegnter.MAX_VALUE 

 

4:原码反码补码深入理解

计算机巧妙的把符号位参与到运算中,并且把减法变成加法。

把钟表想象成一个1位的12进制数,如果当前时间是6点,我希望将时间设置成4点,有如下的操作可以达到目的

1:往回拨2h   6 -2 = 4

2:往前拨10h  (6 + 10)mod 12 = 4

3:往前拨 10 + 12 = 22h    (6 + 22) mod 12 = 4

从上面可以看出,钟表往回拨(减法)的结果可以用往前拨(加法)来代替

 

4.1:同余的概念

两个整数a,b,若他们除以整数m所得的余数相等,则称a,b对于模m同余,记作 a = b(mod m)。读做a与b关于模m同余

eg:4 , 16 , 28 关于模12同余

4 mod 12 =4

16 mod 12 = 4

28 mod 12 = 4

4.2:负数取模

eg:

-3 mod 2 = -3  - 2 * (-3/2)

               = -3 - 2 * (-2)

               = -3 + 4 = 1

4.3:开始证明

(-2) mod 12 = 10

10 mod 12 = 10      -2 和 10是同余的

线形运算定理:

如果a ≡ b (mod m),c ≡ d (mod m) 那么:

(1)a ± c ≡ b ± d (mod m)

(2)a * c ≡ b * d (mod m)

如果想看这个定理的证明, 请看:http://baike.baidu.com/view/79282.htm  (同余定理)

    现在我们为一个负数,找到了它的正数同余数,7 -2 ≡ 7 + 10 (mod 12)  即计算结果的余数相等

下面回到二进制的问题上,看一下 2 - 1 = 1 的问题

2-1=2+(-1) = [0000 0010]原 + [1000 0001]原= [0000 0010]反 + [1111 1110]反

先到这一步, -1的反码表示是1111 1110. 如果这里将[1111 1110]认为是原码, 则[1111 1110]原 = -126, 这里将符号位除去, 即认为是126.

发现有如下规律:

(-1) mod 127 = 126

126 mod 127 = 126

即:

(-1) ≡ 126 (mod 127)

2-1 ≡ 2+126 (mod 127)

2-1 与 2+126的余数结果是相同的! 而这个余数, 正式我们的期望的计算结果: 2-1=1

所以说一个数的反码, 实际上是这个数对于一个模的同余数. 而这个模并不是我们的二进制, 而是所能表示的最大值! 这就和钟表一样, 转了一圈后总能找到在可表示范围内的一个正确的数值!

而2+126很显然相当于钟表转过了一轮, 而因为符号位是参与计算的, 正好和溢出的最高位形成正确的运算结果.

既然反码可以将减法变成加法, 那么现在计算机使用的补码呢? 为什么在反码的基础上加1, 还能得到正确的结果?

2-1=2+(-1) = [0000 0010]原 + [1000 0001]原 = [0000 0010]补 + [1111 1111]补

如果把[1111 1111]当成原码, 去除符号位, 则:

[0111 1111]原 = 127

其实, 在反码的基础上+1, 只是相当于增加了膜的值:

(-1) mod 128 = 127

127 mod 128 = 127

2-1 ≡ 2+127 (mod 128)

此时, 表盘相当于每128个刻度转一轮. 所以用补码表示的运算结果最小值和最大值应该是[-128, 128].

但是由于0的特殊情况, 没有办法表示128, 所以补码的取值范围是[-128, 127]

 

 

 


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

相关文章

原码反码补码习题

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

无线安全WLAN WEP破解(一)

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