【计组】数据的表示与运算

news2024/9/22 16:49:34

【计组】数据的表示与运算

一、数据的表示方法和转换

1、真值

二进制数和十进制数一样有正负之分,书写时加上“+”或“-”来表示的,叫做真值。

例:十进制的+3和-6,二进制的+011和-110都是真值。

2、机器数

机器数采用二进制的0表示正,1表示负。符号数值化的带符号二进制数,称为机器数。

例:真值的-011,用机器数表示为0011,而-110就可以表示为1110。

3、BCD码

BCD(Binary-Coded Decimal)码,也叫二-十进制码,主要就是用4位二进制来表示1位的从0~9的进制数。BCD码主要分为有权码(8421码、5421码、2421码)和无权码(余三码、余三循环码)。

3.1、8421码

用指定的4位二进制数来表示1位的从0~9的十进制数。对照表格即可:

十进制8421 码
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001

换算算法:8421码主要有两种换算算法,从二进制到八进制(B to O),从八进制到二进制(O to B)。

B to O:例:0111—> (8 * 0)+(4 * 1)+(2 * 1)+(1*1) = 7

O to B:例:60的二进制是11110—> 111 100 =7 4

3.2、余三码

余三码是由8421码加上0011后形成的一种无权码。

例:(4567)对应的 余3码为 0111 1000 1001 1010
推导过程 即 4 对应 0100 + 0011(十进制的3)=0111

​ 5 对应0101 + 0011 =1000

​ 6 对应0110 + 0011 =1001

​ 7 对应0111 + 0011 =1010

当两个余三码相加不产生进位时,应从结果中减去0011;产生进位时,应将进位信号送入高位,本位加0011。

4、格雷码

格雷码,又叫循环二进制码或反射二进制码,是指任何两个相邻编码只有1个二进制位不同,而其余3个二进制位相同。余三循环码就是余三码通过格雷码的异或运算,所得到的一系列变权码。

二进制数与格雷码间的转换关系如下表:

十进制码二进制码格雷码十进制码二进制码格雷码
000000000810001100
100010001910011101
2001000111010101111
3001100101110111110
4010001101211001010
5010101111311011011
6011001011411101001
7011101001511111000

二进制码转换为格雷码

法则是保留二进制码的最高位作为格雷码的最高位,格雷码的其余位为二进制码对应位与其上一位相异或。

格雷码转换为二进制码

法则是保留格雷码的最高位作为二进制码的最高位,二进制码的其余位为格雷码对应位与二进制码上一位相异或。
在这里插入图片描述

二、带符号的二进制数据的表示方法及加减运算

1、原码

原码是指最高位为符号位0/1 + 数值的绝对值形式。

例:

x = +0.1101,则[x]原 = 0.1101;x = +1101,则[x]原=01101

x = -0.1111,则[x]原 = 1.1111;x = -1111,则[x]原 = 11111

特点

  1. 值0+,-0的原码分别为00000、10000,形式不唯一;
  2. 正数的原码码值随着真挚的增长而增长,负数的原码码值随着真值的增长而减少;
  3. n+1 位原码表示定点整数范围-(2n-1) — 2n-1,n+1 位的原码表示定点小数范围-(1-2-n) — 1-2-n。

运算:符号位不参与计算,绝对值相加减,数值的大小决定原酸结果符号。

2、反码

X是正数,[X]反=[X]正;X是负数,则符号不变,数值取反。另一定义法,即[x]反 = (2-2-n)符号位 + X(MOD(模)2-2-n)。

例:

x=+0.1101,则[x]反=0.1101;x=+1101,则[x]反=01101

x= -0.1111,则[x]反=1.0000;x= -1111,则[x]反=10000

特点

  1. 数值零的反码表示不唯一
  2. 正数反码码值随着真值增大而增大,负数反码码值随着真值的增大而增大
  3. n+1 位反码所表示的定点整数范围 -(2n-1) — 2n-1,n+1位反码所表示定点所表示定点小数范围-(1-2-n) — 1-2-n。

运算:在机器数范围内,反码运算满足[X+Y]反=[X]反+[Y]反,[X - Y]反 = [X]反 + [-Y]反。反码运算在最高位由有进位时,要在最低为+1,此时要多进行一次加法运算,因此很少采用。

3、补码

X是正数,[X]补=[X]反=[X]正;X是负数,则符号不变,数值取反后+1。另一定义法,即[X]补 = 2*符号位 + X(MOD(模)2)。

例如:

x=+0.0101,则[x]补=0.0101;

x= -0.0101,则[x]原=1.0101—>[x]反=1.1010—>[x]补=1.1011;

x= -0.0000,则[x]原=1.0000—>[x]反=1.1111—>[x]补=0.0000;

特点

  1. 数值零的补码表示唯一;
  2. 正数补码码值随着真值增大而增大,负数补码码值随着真值增大而增大;
  3. n+1位补码所表示定点整数范围 -2n — 2n-1,n+1位补码所表示定点小数范围 -1 — 1-2-n。

运算:结果不超过机器所能表示范围时,[X+Y]补 = [X]补 + [Y]补,[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补。

例1:设x=0.1010,y=0.0101,求 [x]补+[y]补 。

先将真值x和y转换成由补码数据表示:

x[补]=0.1010,y[补]=0.0101

利用补码加法公式可得:

​ [x]补 0.1010

+[y]补 0.0101

[x+y]补 0.1111

所以:x[补]+[y]补=0.1111

例2:设x=0.1001,y=0.0110,求 [x]补-[y]补 。

[x]补=0.1001,[y]补=0.0110,[-y]补=1.1010

​ [x]补 0.1001

+[-y]补 1.1010

[x-y]补 10.0011

符号位进位的1值为模数,应该舍去,所以:[x]补-[y]补=0.0011

结论

  • 负数的补数=模+负数
  • 互为补数的绝对值相加=模
  • 在补数中,减法运算即加法运算

加减法运算的溢出处理

当运算结果超出机器数所能表示的范围称为溢出。可能溢出的情况分为同号数相加和异号数相减。

判断溢出的方法
法一:当符号相同两数相加,结果符号和加数(或被加数)不相同,则溢出。fa,fb 表示两操作数(A,B)的符号位,fs 为结果的符号位。
法二:任意符号相加,如果C = Cf,则结果正确,否则溢出;C 为数值最高位的进位,Cf 为符号位的进位。
法三:采用双符号相加,如果fs1 = fs2,则结果正确,否则溢出;运算结果的符号位为 fs2;
多符号位的补码,叫做变形补码;如果采用双符号位,当数为小数时,模m=4;当数为整数时,模m=2的n+2次方。

4、移码

[X]补的符号位取反,即得[X]移。

特点

  1. 最高位是符号位,1表示正,0表示负;
  2. 数据0有唯一的编码;
  3. 移码码值随着真值增大而增大
  4. n+1位移码所表示定点整数范围 -2n — 2n-1,n+1 位移码所表示定点小数范围 -1 — 1-2-n;
  5. 计算机中,移码常用于表示阶码,故只执行加、减运算;
  6. 计算机中,移码运算公式需要对结果进行修正。
浮点数的阶码求和公式

[X]移+[Y]补 = [X+Y]移 mod2的n+1次方

[X]移+[-Y]补 = [X-Y]移

判溢方法:

  • 双符号位参加运算,最高符号位恒置0
  • 当结果最高符号位=1则溢出 低位符号=0,则上溢;地位符号=1,则下溢;
  • 当结果最高符号位=0则未溢出 低位符号=0,负数;地位符号=1,正数;

说明:如果阶码运算的结果溢出,上述条件不成立。此时,使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是结果的最高符号位为1。此时低位符号为0时,表明结果上溢;为1时,表明结果下溢。当最高符号位为0时,表明没有溢出,低位符号位为1,表明结果为正;为0时表明结果为负。

三、定点数和浮点数

1、定点数

小数点固定在某个位置上的数据,小数点前、后的数字,分别用二进制表示,这种表示方式叫做「定点」表示法,用这种方法表示的数字叫做「定点数」。

用定点数表示一个小数的方法:

  1. 在有限的 bit 宽度下,先约定小数点的位置;
  2. 整数部分和小数部分,分别转换为二进制表示;
  3. 两部分二进制组合起来,即是结果。

约定前5位表示整数部分,后3位表示小数部分。用定点数表示如下,例:

1.5(D) = 00001 100(B)

25.125(D) = 11001 001(B)

2、浮点数

1、符号位(S):安排在最高位,0表示正数,1表示负数
2、阶码(E):8位,跟在符号位之后,指数e加上一个固定的偏移值127(01111111),即E=e+127
3、尾数(M):23位,规格化后,跟在阶码之后,不足23位的在右边(低位)补0
规格化:为了提高数据的表示精度,当尾数的值不为0时,尾数域的最高有效位应为1,这称为浮点数的规格化表示。

根据 IEEE754 国际标准,常用的浮点数有两种格式:

Nmax = Mmax * 2的Emax;Nmin = Mmin * 2的Emax。

单精度(32位)=1位符号(S)+8位阶码(E)+23位尾数(M),取值范围:-2的127次方~(1-2的-23次方) * 2的127次方。

双精度(64位)=1位符号(S)+11位阶码(E)+52位尾数(M),取值范围:2的1023次方~(1-2的-52次方) * 2的1023次方。

为了保证数据精度,尾数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值应大于或等于(0.5)10。

表示形式:N = M * RE
计算机中存储形式:MS+ES+E(n位)+M(m位)

阶码E,一般为整数,用补码或者移码表示;尾数M,一般为规格化的定点小数,用补码表示。

将十进制转换为浮点数

例:将十进制数20.59375转换成IEEE754单精度浮点数的十六进制机器码

① 首先我们要分别将整数和小数部分转换成二进制数:

20的二进制为10100,0.59375的二进制为0.10011,所以20.59375的二进制表示为10100.10011

② 移动小数点,使尾数变成1.M的形式(规格化):

10100.10011=1.010010011*2^4

③ 分析得:

S=0,E=e+127=4+127=131=10000011,M=010010011

所以32位浮点数的二进制存储格式为:

01000 0011010 0100 1100 0000 0000 0000
数符(S)阶码(E)尾数(M)

④ 最终的机器码为:0100 0001 1010 0100 1100 0000 0000 0000

​ 对应的十六进制为: 4 1 A 4 C 0 0 0

将浮点数转换为十进制数

例:求IEEE754单精度十六进制浮点数(C1360000)对应的十进制

① 将十六进制数展开成二进制数为:1100 0001 0011 0110 0000 0000 0000 0000

② 从浮点数中分离出S、E、M:

S=1 符号位为:负

E=100 0001 0

M=011 011

③ 计算得:e=E-127=00000011=3(十进制)

实际尾数为:1.M=1.011011

移动小数点,实际尾数为:1011.01

④ 将其转换为十进制数:1011是11,0.011是0.375,所以十进制数为 -11.375。

3、浮点数的运算方法

浮点数加减法运算

  1. 对阶操作:求出∆E,再对小的进行移位;
  2. 尾数的加减运算;
  3. 规格化操作:规则简化是符号位和数值最高位不同,即00.1xxxx或11.0xxxx;
  4. 舍入:查出表示范围的高位为1舍入;
  5. 见检查阶码是否溢出。

浮点数乘除法运算

  1. 浮点数阶码运算(移码):
    1. [X+Y]移 = [X]移 + [Y]补
    2. [X-Y]移 = [X]移 + [-Y]补
  2. 按照一位乘或加减交替除运算 先确定符号,在列式子计算。

最后

对各位小伙伴有帮助的话,希望可以点赞❤️+收藏⭐,谢谢各位大佬~~🙌🙌🙌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最优化理论与自动驾驶(十一):基于iLQR的自动驾驶轨迹跟踪算法(c++和python版本)

最优化理论与自动驾驶(四):iLQR原理、公式及代码演示 之前的章节我们介绍过,iLQR(迭代线性二次调节器)是一种用于求解非线性系统最优控制最优控制最优控制和规划问题的算法。本章节介绍采用iLQR算法对设定…

Cpp类和对象(中)(4)

文章目录 前言一、类的六个默认成员函数二、构造函数构造函数的概念构造函数的特性构造函数的两种分类编译器默认生成构造函数意义及相关问题C11打的补丁 三、析构函数析构函数的概念析构函数的特性验证是否会自动调用析构函数验证析构函数对于内置与自定义类型处理验证先定义后…

【学习笔记】数据结构(六 ②)

树和二叉树(二) 文章目录 树和二叉树(二)6.3.2 线索二叉树 6.4 树和森林6.4.1 树的存储结构6.4.2 森林与二叉树的转换6.4.3 树和森林的遍历 6.5 树与等价问题6.5.1 等价定义6.5.2 划分等价类的方法6.5.3 划分等价类的具体操作 - 并…

【LeetCode热题100】位运算

这篇博客先介绍了常见位运算操作,然后记录了关于位运算的几道题,包括判定字符是否唯一、丢失的数字、两整数之和、只出现一次的数字2、消失的两个数字。 在这一部分,我们不妨先来总结一下常见位运算操作: 1.基础位运算 >>…

vite 使用飞行器仪表示例

这里写自定义目录标题 环境vue代码效果图 环境 jquery npm install -S jqueryjQuery-Flight-Indicators 将img、css、js拷贝到vite工程目录中 打开 jquery.flightindicators.js&#xff0c;在文件开头加上import jQuery from "jquery"; vue代码 <template>&…

C#(.NET FrameWork库)逆向基础流程(纯小白教程)

一&#xff0c;例题链接 限时题目&#xff0c;只能用网盘来分享了&#xff0c;侵权联系删->百度网盘 请输入提取码 二&#xff0c;文件特征 使用工具查看文件信息&#xff0c; 能看到分析出文件编写语言为C#&#xff0c;使用了.NET库 三&#xff0c;做题流程 &#xff08…

浙版传媒思迈特软件大数据分析管理平台建设项目正式启动

近日&#xff0c;思迈特软件与出版发行及电商书城领域的领军企业——浙江出版传媒股份有限公司&#xff0c;正式启动大近日&#xff0c;思迈特软件与出版发行及电商书城领域的领军企业——浙江出版传媒股份有限公司&#xff0c;正式启动大数据分析管理平台建设项目。浙版传媒相…

Java之继承1

1. 继承 1.1 为什么要继承 在Java中我们定义猫类和狗类&#xff0c;如下 public class Cat {public String name;public int age;public String color;public void eat(){System.out.println(name "正在吃饭");}public void sleep(){System.out.println(name &qu…

基于pytorch本地部署微调bert模型(yelp文本分类数据集)

项目介绍 本项目使用hugging face上提供的Bert模型API&#xff0c;基于yelp数据集&#xff0c;在本地部署微调Bert模型&#xff0c;官方的文档链接为https://huggingface.co/docs/transformers/quicktour&#xff0c;但是在官方介绍中出现了太多的API调用接口&#xff0c;无法…

React 中的延迟加载

延迟加载是 Web 开发中的一种有效的性能优化技术&#xff0c;尤其是对于 React 等库和框架。它涉及仅在需要时加载组件或资源&#xff0c;无论是响应用户操作还是当元素即将在屏幕上显示时。这可以减少应用程序的初始加载时间&#xff0c;减少资源消耗&#xff0c;并改善用户体…

ETLCloud:新一代ETL数据抽取工具的定义与革新

数据集成、数据治理已经成为推动企业数字化转型的核心动力&#xff0c;现在的企业比任何时候都需要一个更为强大的新一代数据集成工具来处理、整合并转化多种数据源。 而ETL&#xff08;数据提取、转换、加载&#xff09;作为数据管理的关键步骤&#xff0c;已在企业数据架构中…

串口助手的qt实现思路

要求实现如下功能&#xff1a; 获取串口号&#xff1a; foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()) {qDebug() << "Port: " << serialPortInfo.portName(); // e.g. "COM1"qDebug() <<…

【JavaEE】——线程的安全问题和解决方式

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;问题引入 二&#xff1a;问题深入 1&#xff1a;举例说明 2&#xff1a;图解双线程计算…

SwiftUI 实现关键帧动画

实现一个扫描二维码的动画效果&#xff0c;然而SwiftUI中没有提供CABasicAnimation 动画方法&#xff0c;该如何实现这种效果&#xff1f;先弄清楚什么关键帧动画&#xff0c;简单的说就是指视图从起点至终点的状态变化&#xff0c;可以是形状、位置、透明度等等 本文提供了一…

(done) 声音信号处理基础知识(3) (一个TODO: modulation 和 timbre 的关联)(强度、响度、音色)

来源&#xff1a;https://www.youtube.com/watch?vJkoysm1fHUw sound power 通常可以被认为是能量传输的速率 声源往所有方向传输的每时间单位能量 用 瓦特(W) 作为单位测量 Sound intensity 声音强度&#xff0c;每单位面积的 sound power W/m^2 人类实际上能听到非常小强…

八. 实战:CUDA-BEVFusion部署分析-coordTrans Precomputation

目录 前言0. 简述1. 案例运行2. coordTrans3. Precomputation总结下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第八章—实战&#xff1a;CUDA-BEVFusion部署分…

Python Selenium 自动化爬虫 + Charles Proxy 抓包

一、场景介绍 我们平常会遇到一些需要根据省、市、区查询信息的网站。 1、省市查询 比如这种&#xff0c;因为全国的省市比较多&#xff0c;手动查询工作量还是不小。 2、接口签名 有时候我们用python直接查询后台接口的话&#xff0c;会发现接口是加签名的。 而签名算法我…

keil5 MDK 最新版本官网下载(v5.40为例) ARM单片机环境搭建安装教程(STM32系列为例)

正所谓授之以鱼不如授之以渔。本文将细讲从官网下载keil5MDK来保证keil5为最新版本的实时性 &#xff08;注意新老版本可能出现版本兼容问题&#xff0c;若不放心&#xff0c;跟着老弟我一起下载5.40版本即可&#xff09; 目录 一、下载keil5 MDK 方法①:CSDN下载&#xff0…

计算机毕业设计 基于 Hadoop平台的岗位推荐系统 SpringBoot+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【深入学习Redis丨第六篇】Redis哨兵模式与操作详解

〇、前言 哨兵是一个分布式系统&#xff0c;你可以在一个架构中运行多个哨兵进程&#xff0c;这些进程使用流言协议来接收关于Master主服务器是否下线的信息&#xff0c;并使用投票协议来决定是否执行自动故障迁移&#xff0c;以及选择哪个Slave作为新的Master。 文章目录 〇、…