当前位置: 首页 > news >正文

计算机组成原理之运算方法和运算器

文章目录

  • 数据格式
    • 定点数
    • 浮点数
  • 机器码表示
    • 原码
    • 反码
    • 补码
      • 数的补码与真值
  • 移码
    • IEEE754标准

数据格式

定点数

  • 定点数就是数据的小数点的位置是固定不变的,通常将数据表示成纯小数或纯整数
  • n + 1 n+1 n+1 位数表示定点数,以 X n Xn Xn表示定点数的正负(0 为正数,1表示负数)
  • 对于 n + 1 n+1 n+1位定点数,小数点位于 X n Xn Xn X n − 1 Xn-1 Xn1之间,当每一个数位都是0时,绝对值最小为0,当全部数位为1时,绝对值最大为 1 − 2 − n 1- 2^{-n} 12n
  • 对于定点整数,表示的范围是 0 < = ∣ x ∣ < = 2 n − 1 0<= |x|<=2^n -1 0<=x<=2n1

浮点数

  • 计算机中,任意的二进制数N 可以写成: N = 2 e . M N=2^e.M N=2e.M
    其中,M 是一个纯小数,称为尾数,e 是浮点数的指数,是一个整数,称为阶码

机器码表示

原码

  • 通俗来说就是,符号位加上二进制的绝对值
  • 对于0,有+0-0的两种表示方法
  • 缺点:加法运算复杂

反码

  • 正数的反码与原码相同,负数的反码就是负数的原码符号位不变,数值位取反

补码

  • 对于正数的补码就是原码
  • 对于定点整数,负数的补码在计算上面可以由反码加1得到;但是从定义上看,我们用n+1 为数来表示一个定点整数,其中 X n Xn Xn为符号位,那么就有
    [ x ] 补 = 2 n + 1 − ∣ x ∣ [x]补 = 2^{n+1} - |x| [x]=2n+1x ,其实从实际意义上就是用正数多于的部分来表示负数
  • 采用补码的话,0的表示方法只有一种,并且无论数字为正数还是负数,机器总是做加法运算

数的补码与真值

  • [ x ] 补 = X n X n − 1 X n − 2 . . . . X 1 X 0 [x]_补 =X_nX_{n-1}X_{n-2}....X_1X_0 [x]=XnXn1Xn2....X1X0
    对于上面的形式: x = − 2 n X n + ∑ i = 0 n − 1 2 i x i x = -2^n X_n+\sum_{i=0}^{n-1}2^ix^i x=2nXn+i=0n12ixi
  • 如何更好理解?
  • 对于正数来说,由于符号位为0,那么就直接根据权重展开就可以
  • 对于负数来说,由于符号位为1,那么就是包括符号位共n+1位的情况下,就用 − 2 n -2^n 2n去加上偏移量,就是后面的一堆的数字的权重即可,具体而言就是以一个时钟为例子:
    一共由60份,本来是 [ 0 , 60 ] [0,60] [0,60],但是现在我用 [ 0 , 30 ] [0,30] [0,30]来表示正数, [ 30 , 60 [30,60 [30,60来表示原本的 [ − 30 , 0 ] [-30,0] [30,0],并且-30 的位置与30 的位置重合,那么具体如何求回本身的负数呢?就是目前的位置逆时针转动一圈即可,就是-60

移码

  • 移码通常表示浮点数的阶码,移码的定义为:
    [ e ] 移 = 2 k + e [e]_移=2^k+e [e]=2k+e, 2 k > e > = − 2 k 2^k>e>=-2^k 2k>e>=2k
    其中 [ x ] 移 [x]_移 [x] 为机器码,e 表示真值, 2 k 2^k 2k是一个固定的偏移值常数

IEEE754标准

  • 对于32位浮点数:符号位在最高位(1位),E 是阶码位(8位),M 是尾数位(23位)
  • 浮点数的指数真值e 变成阶码的时候加上127
    E = e + 127 E =e+127 E=e+127
    规格化表示:一个规格化的32位浮点数x 的真值表示为
    x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 E − 127 x=(-1)^S*(1.M)*2^{E-127} x=(1)S(1.M)2E127
http://www.lryc.cn/news/316843.html

相关文章:

  • Redux Toolkit
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码)
  • 在亚马逊云EC2上启动PopOS
  • Linux运维:磁盘分区与挂载详解
  • jeecg 项目 springcloud 项目有一个模块 没加载进来 只需要 把这个模块放到 可以加载到模块的位置 刷新依赖
  • spring boot使用mybatisplus访问mysql的配置流程
  • git 如何将多个提交点合并为一个提交点 commit
  • [C语言] 数据存储
  • LoadBalancer负载均衡服务调用
  • YoloV8实战:YoloV8-World应用实战案例
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-1、线条平滑曲面且可通过面观察柱体变化(一)
  • cmake初识
  • Swift 入门学习:集合(Collection)类型趣谈-下
  • nova 12 LTPO来了!LTPO动态自适应刷新率屏120Hz体验更流畅 ,1Hz阅读更省电
  • 【rk3368 android6.0 恢复出厂设置功能】
  • 闲聊电脑(7)常见故障排查
  • Vim 编辑器|批量注释与批量取消注释
  • Android 使用AIDL HAL
  • C++的一些基础语法
  • mysql 技术100问?
  • APK漏洞扫描工具
  • ReactNative项目构建分析与思考之react-native-gradle-plugin
  • LeetCode454 四数相加
  • Kafka消费者重平衡
  • 【线代基础】张量、向量、标量、矩阵的区别
  • 用chatgpt写论文重复率高吗?如何降低重复率?
  • 字节跳动也启动春季校园招聘了(含二面算法原题)
  • 二,几何相交---4,BO算法---(3)数据结构
  • 中间件MQ面试题之Kafka
  • Prometheus 安装部署