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

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

目录:

  • 原码,补码,反码概念和计算方法详解
    • 一、机器数和真数
    • 二、原码,反码,补码的基础概念和计算方法
    • 三、为何要使用原码,反码和补码
    • 四、Example

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

一、机器数和真数

1、机器数

一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1.

比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。

那么,这里的 00000011 和 10000011 就是机器数。

2、真值

机器数的第一位是符号位,后边才是真正的数值,所以机器数的形式值就不等于真正的数值。例如上面的有符号数10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:

0000 0001的真值 = +000 0001 = +1

1000 0001的真值 = –000 0001 = –1

二、原码,反码,补码的基础概念和计算方法

在探求为何机器要使用补码之前,让我们先了解原码,反码和补码的概念。对于一个数,计算机要使用一定的编码方式进行存储。 原码,反码,补码是机器存储一个具体数字的编码方式。

1.原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:

[+1](原码) = 0000 0001

[-1](原码) = 1000 0001

第一位是符号位。因为第一位是符号位,所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式。

2.反码

反码的表示方法是: 正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

[+1] = [00000001](原码)= [00000001](反码)

[-1] = [10000001](原码)= [11111110](反码)

可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。

3.补码

补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1 (即在反码的基础上+1)。

[+1] = [00000001](原码) = [00000001](反码) = [00000001](补码)

[-1] = [10000001](原码) = [11111110](反码) = [11111111](补码)

对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。

三、为何要使用原码,反码和补码

现在我们知道了计算机可以有三种编码方式表示一个数。对于正数因为三种编码方式的结果都相同:

[+1] = [00000001](原码) = [00000001](反码) = [00000001](补码)

所以不需要过多解释. 但是对于负数:

[-1] = [10000001](原码) = [11111110](反码) = [11111111](补码)

可见原码, 反码和补码是完全不同的。既然原码才是被人脑直接识别并用于计算表示方式。为何还会有反码和补码呢?

首先, 因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位, 选择对真值区域的加减 (真值的概念在本文最开头)。但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单。计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法。我们知道,根据运算法则减去一个正数等于加上一个负数,即: 1-1 = 1 + (-1) = 0 ,所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了

于是人们开始探索,将符号位参与运算,并且只保留加法的方法。首先来看原码:
在这里插入图片描述
从上面的原码表中可以看见左边每增加一个二进制单位对应的真数是递减的而右边每增加一个二进制单位对应的真数是递增的,所以对于原码来说,能满足正数的加法,但无法满足负数的加法

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

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -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。

于是补码的出现,解决了0的符号涉及两个编码的问题:
在这里插入图片描述
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原

这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:

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

-1-127的结果应该是-128,在用补码运算的结果中,[1000 0000]补 就是-128。但是注意因为实际上是使用以前的-0的补码来表示-128,所以-128并没有原码和反码表示 (对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原,这是不正确的)。

使用补码,不仅仅修复了0的符号以及存在两个编码的问题,而且还能够多表示一个最低数. 这就是为什么8位二进制,使用原码或反码表示的范围为[-127, +127],而使用补码表示的范围为[-128, 127]

四、Example

设计一个电路实现result[14:0] <= a[7:0] * 8’b1111_1011,用尽量少的资源来实现。写出代码,请完成代码add_result。

  • 思路:
    8’b1111_1011 = 9’h100 - 3’b100 - 1’b1
    -a*3’b100 = -({6’h00,a,2’b00}) = ({6’h3f,~a,2’b11}) + 1’b1
module	add_result(clk,rstn,a,result
);input								clk;input								rstn;input	[7:0]						a;	output  [15:0]				  	 	result;//result <= a * 8'b1111_1011, resutl比a延迟1Treg     [15:0]						result;always@(posedge clk or negedge rstn)beginif(!rstn)beginresult <= 16'h0000;endelse beginresult <= {a[7:0],8'h00} + {6'h3F,(~a[7:0]),2'b11} + 1'b1 + {8'hFF,(~a[7:0])} + 1'b1; // result = a* 9'h1_0000_0000 - a*3'b100 -a;endendendmodule

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

相关文章

原码、反码、补码详解

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

什么是原码、反码和补码

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

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;果然有几个无线网…