各种机器码的本质(原码、反码、补码、移码、IEEE754格式阶码)

在这里插入图片描述

总述

  • 无论使用什么格式的机器码来表示真值,若取一定位数n以后,各个比特位的排列个数是一定的,为 2 n 2^n 2n种排列,所以选择什么格式的机器码实质上选择什么映射方式来完成从这 2 n 2^n 2n种离散排列到离散的整数真值的映射,而不同的映射方式其实只是在:算数运算能力、逻辑比较能力和可读性三者中进行权衡。
  • 需要解释上图,需要读者先接受一种思考的角度:比特位的排列可以暂时完全看成看成无符号数,其绝对值从左到右递增,而与具体的机器数格式无关

原码

最符合人类直觉的机器码

算数运算能力:差

  • 符号位不能参与运算,需要另外设置电路进行处理
  • +0和-0分别占了一个排列,既不统一又浪费空间

逻辑比较能力:差

  • 需要先区分符号位且在同一符号内部的变化趋势也不同,正数内部随着比特位的绝对值增大而增大,负数内部随着比特位的绝对值增大而减小。这意味着不仅要设置电路区分正负,甚至正数和负数内部的比较逻辑都需要不同的电路

可读性:好

  • 可读性很好,可以很方便看出真值

反码

后面补码的出现,让反码成为了仅仅为了导出补码的工具

算数运算能力:差

  • 符号位不能参与运算,需要另外设置电路进行处理
  • +0和-0分别占了一个排列,既不统一又浪费空间

逻辑比较能力:一般

  • 只需要区分符号位,在同一符号内部的变化趋势相同,都是随着比特位的绝对值增大而增大

可读性:一般

  • 可读性一般,不容易看出真值

补码

补码继承了反码的优点,克服了反码的缺点。已经是一种很优秀的机器码了

算数运算:非常好

  • 符号位可以直接参与运算
  • 0的表示完成了统一,而且可以多表示一个最小值,一举两得

逻辑比较:一般

  • 同反码一样,只需要区分符号位,在同一符号内部的变化趋势相同,都是随着比特位的绝对值增大而增大

可读性:差

  • 基本上无法读了

移码

虽然补码对于机器而言已经近乎完美,但是在某些需要频繁比较而几乎不需要进行加减运算的场合,补码的表现依然可以改进,因为它每次比较都需要先判断符号位然后再比较。如果能想到一个能免去比较符号这一步的机器码就能解决这个问题,而移码恰好完美符合这一点。

算数运算:一般

  • 不如补码方便,尤其是减法运算

逻辑比较:非常好

  • 逻辑比较:只需要按无符号数的视角比较绝对值即可,绝对值越大所表示的数的真值就越大。不需要额外设置任何电路

可读性:很好

  • 可读性:可以根据移码快速读出两数谁大谁小

IEEE 754阶码(本质是经过改造的特殊移码)

IEEE 754的阶码虽然本质上是移码,但是和一般的移码有所不同

  • 先说明,改造了哪些地方:
    • 全0和全1机器码不能再用作普通阶码,要作特殊解释
    • 偏置值小了1
  • 然后说明,为什么要这么改:
    • 全0和全1意义的修改是为了——需要特殊值来表示无穷大∞和非数NAN
    • 偏置值小1是为了——获得更大的正数阶码
  • 结果:在这两点改动之后,阶码可以表示的真值的范围发生的变化是:
    • 最大值无变化,依然为 2 n − 1 − 1 2^{n-1}-1 2n11,最小值从 − 2 n -2^n 2n变成 − 2 n + 2 -2^n+2 2n+2

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现 线性卷积用Toeplitz 矩阵运算

python实现 线性卷积用Toeplitz 矩阵运算 前言 在看论文的时候,发现Toeplitz 矩阵和线性卷积有关系,于是翻了程佩青老师的数字信号处理课本,发现是有讲过这点的。 Toeplitz 矩阵:从左上到右下的斜对角线都相同,如下…

string类的模拟实现(万字讲解超详细)

目录 前言 1.命名空间的使用 2.string的成员变量 3.构造函数 4.析构函数 5.拷贝构造 5.1 swap交换函数的实现 6.赋值运算符重载 7.迭代器部分 8.数据容量控制 8.1 size和capacity 8.2 empty 9.数据修改部分 9.1 push_back 9.2 append添加字符串 9.3 运算符重载…

LangChain 用例(未完)

在Azure上的OpenAI端点 注意 OpenAI key 可以用微软 用例【1. 嵌入 ,2. 问答】 1. import os import openai from langchain.embeddings import OpenAIEmbeddings os.environ["OPENAI_API_KEY"] "****" # Azure 的密钥 os.environ["OP…

ChainForge:衡量Prompt性能和模型稳健性的GUI工具包

ChainForge是一个用于构建评估逻辑来衡量模型选择,提示模板和执行生成过程的GUI工具包。ChainForge可以安装在本地,也可以从chrome浏览器运行。 ChainForge可以通过聊天节点对多个对话可以使用不同的llm并行运行。可以对聊天消息进行模板化,并…

数据挖掘(3)特征化

从数据分析角度,DM分为两类,描述式数据挖掘,预测式数据挖掘。描述式数据挖掘是以简介概要的方式描述数据,并提供数据的一般性质。预测式数据挖掘分析数据建立模型并试图预测新数据集的行为。 DM的分类: 描述式DM&#…

Python安装指南:安装Python、配置Python环境(附安装包)

1. 选择正确的版本,下载安装包 根据你的实际需要选择Python发行版本。 值得注意的是,编程语言包并不是越新越好的,不同版本的Python之间可能会产生兼容性问题。 如果你不确定你的项目需要哪个版本,请查阅您可能需要使用到的插件的…

洛谷题目题解详细解答

洛谷是一个很不错的刷题软件,可是找不到合适的题解是个大麻烦,大家有啥可以私信问我,以下是我已经通过的题目。 你如果有哪一题不会(最好是我通过过的,我没过的也没关系),可以私信我&#xff0…

【java基础-实战1】字符串的驼峰与下划线互转

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 背景 在日常开发过程中,驼峰与下划线的互…

十二、同步互斥与通信

1、概述 (1)可以把多任务系统当做一个团队,里面的每一个任务就相当于团队中的一个人。团队成员之间要协调工作进度(同步)、争用会议室(互斥)、沟通(通信)。多任务系统中所涉及的概念,都可以在现实生活中找到例子。 (2)各类RTOS都会涉及这些概念&#x…

数据结构-优先级队列(堆)

文章目录 目录 文章目录 前言 一 . 堆 二 . 堆的创建(以大根堆为例) 堆的向下调整(重难点) 堆的创建 堆的删除 向上调整 堆的插入 三 . 优先级队列 总结 前言 大家好,今天给大家讲解一下堆这个数据结构和它的实现 - 优先级队列 一 . 堆 堆(Heap&#xff0…

1800_vim的宏录制功能尝试

全部学习信息汇总: GreyZhang/editors_skills: Summary for some common editor skills I used. (github.com) 最近5年多来,我emacs的编辑器用的还是比较多的。我的配置基本上是一个spacemacs,然后根据自己的需求增加了一丁点儿的其他配置。而…

1024 科学计数法

一.问题: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [-][1-9].[0-9]E[-][0-9],即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确…