计算机组成原理第二章数据表示

2023-12-18 03:45

本文主要是介绍计算机组成原理第二章数据表示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 一、数制与编码
    • 1.1 进位计数制
      • 1.1.1 进制及转换
        • 所谓进位计数法是一种计数方法,咱们最常用的莫过于十进制了,除此之外还有八进制、十六进制等。这里不得不提几个概念术语:
        • 基数:比如说十进制、八进制和十六进制,它们的基数分别为10(0~9)、8(0~7)、16(0~15)
        • 数位:比如二进制数1010,这里就有4个数位,从高位到低位依次的数码值为1、0、1、0
        • 数码:比如八进制,那么数码,即数码值的范围为(0~7)
        • 位权:每个数码所表示的数值等于该数码值乘以一个与它所在位有关的常数,这个常数称为位权。
        • 基数和数码的关系:每个数位所用到的不同数码的个数称为基数
      • 1.1.2 真值、机器数
        • 真值
          • 我们日常见到的,有“+”、“-”号的数为真值,比如:+15,-8。
          • 真值是机器数所代表的实际值,一般为十进制数。
        • 机器数
          • 将“符号->数字化”的数。一般为二进制数,比如带符号位的 4 位二进制数 0110,最高位 0 就是符号位,这个数的真值就是 +6。通常0代表“+”号,1代表-号。
      • 1.1.3 进制转换
        • 进制转换是在不同的进制之间进行转换的过程。例如,我们可以将一个十进制数转换为二进制数,或者将一个十六进制数转换为八进制数。以下是一些常见的转换方法:
        •  十进制转二进制:通过不断地除以2并记录余数,然后将余数反向排列,我们可以得到二进制表示。
        •  二进制转十进制:通过将每个二进制位乘以2的相应次方(从右到左,从0开始计数),然后将结果相加,我们可以得到十进制表示。
        • 十进制转十六进制:通过不断地除以16并记录余数,然后将余数(使用0-9和A-F表示10-15)反向排列,我们可以得到十六进制表示。
        • 十六进制转十进制:通过将每个十六进制位乘以16的相应次方(从右到左,从0开始计数),然后将结果相加,我们可以得到十进制表示。
      • 1.1.4 补码、反码
        • 补码和反码是计算机中用于表示负数的两种方法:
        • 反码:对于一个二进制数,其反码是将该数的每一位都取反(即0变为1,1变为0)。
        • 补码:对于一个二进制数,其补码是将该数的反码加1
      • 1.1.5 浮点数
        • 浮点数是一种用于表示实数的计算机数制,它由符号位、指数部分和尾数部分组成。浮点数可以用来表示非常大或非常小的数,以及精确到小数点后多位的数。
  • 二、定点数的表示和运算
    • 2.1 定点数的表示
      • 2.1.1 无符号
        • 整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。若机器字长为 8 位,则数的表示范围  0~255。(通常只有无符号整数,没有无符号小数)
      • 2.1.2 有符号(原码、反码、补码、移码)
        • 在机器中,数的正负我们无法识别,但是我们可以用二进制数来代替正负号。一般‘0’为正,‘1’为负,符号位一般在有效数的最前面。
        • 原码
          • 用尾数表示真值的绝对值,符号位 “0/1”  对应 “正/负”。
        • 反码
          • 若符号位为 0,则反码原码都相同。若符号位为 1,则数值位全部取反。(反码的取值范围与原码相同)
        • 补码
          • 正数的补码 = 原码;  负数的补码 = 反码末位 + 1(要考虑进位)
          • 补码的作用:让减法操作转变为与之等价的加法操作,节省硬件成本。
        • 移码
          • 在补码的基础上,将符号位取反。移码只能用于表示整数。(移码的取值范围与补码相同)
          • 在进行数值比较时,用移码表示的整数符合计算机比较的特性(从前往后先出现1的大),很容易对比大小
    • 2.2 定点数的运算
      • 2.2.1 移位运算
        • 含义
          • 通过改变各个数码位小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法。
        • 分类
          • 算数移位:
            • 原码的算术移位:
              • 符号位保持不变,仅对数值位进行移位。
                • 右移:
                  • 高位补0,低位舍弃。若舍弃的位 = 0,则相当于 ÷ 2 ;若舍弃的位 ≠ 0,则会丢失精度
                • 左移:
                  • 低位补0,高位舍弃。若舍弃的位 = 0,则相当于 × 2 ;若舍弃的位 ≠ 0,则会出现严重错误
            • 反码的算术移位:

            • 补码的算数移位

          • 逻辑移位:
            • 逻辑右移:高位补 0,低位舍弃
            • 逻辑左移:低位补 0,高位舍弃逻辑以为可以看作对 “无符号数” 的算术移位。
          • 循环移位:
            • 循环右移:最低位被舍弃并复制到最高位。
            •  循环左移:最高位被舍弃并复制到最低位。
            •  循环移位可以看作是逻辑移位的一种变体,其中舍弃的位不是被丢弃,而是被移动到另一端。这在某些算法和硬件设计中非常有用。
      • 2.2.2 加减运算(溢出判断)
        • 原码的加减运算
          • 原码的加减运算需要考虑符号位。对于加法,如果符号相同,那么就按照正常的二进制加法进行计算,然后保留符号;如果符号不同,那么就按照正常的二进制减法进行计算,然后保留绝对值较大数的符号。对于减法,可以将减数的符号取反,然后按照加法的规则进行计算。
        • 补码的加减运算
          •  对于补码来说,无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算。如果两个数符号相同,且结果的符号与原来不同,那么就发生了溢出。
        • 溢出判断
          • 方法①:采用一位符号位
            • 如果使用一位符号位,那么可以通过检查结果的符号位和操作数的符号位是否不同来判断是否发生了溢出。如果符号位不同,那么就发生了溢出。
          • 方法②:采用一符号位,根据数据位进位情况判断溢出
            • 如果使用一位符号位,并且根据数据位的进位情况来判断溢出,那么可以通过检查最后两次进位是否不同来判断是否发生了溢出。如果最后两次进位不同,那么就发生了溢出。
          • 方法③:采用双符号位
            • 如果使用双符号位,那么可以通过比较两个符号位是否不同来判断是否发生了溢出。如果两个符号位不同,那么就发生了溢出。
      • 2.2.3 乘法运算
        • ① 原码的乘法运算
          • 对于原码的乘法运算,首先确定结果的符号,如果两个数的符号相同,那么结果为正,否则结果为负。然后取两个数的绝对值进行乘法运算,得到的结果再加上符号位。
        • ② 补码的乘法运算
          • 对于补码的乘法运算,直接将两个补码相乘,得到的结果就是最终结果的补码。这种方法的优点是不需要考虑符号位,简化了运算过程。
      • 2.2.4 除法运算
        • ① 原码的除法运算
          • 对于原码的除法运算,首先确定结果的符号,如果两个数的符号相同,那么结果为正,否则结果为负。然后取被除数和除数的绝对值进行除法运算,得到的结果再加上符号位。
        • ② 补码的除法运算
          •  对于补码的除法运算,首先将被除数和除数转换为补码,然后进行除法运算,得到的结果就是最终结果的补码。这种方法的优点是不需要考虑符号位,简化了运算过程。
    • 2.3 强制类型转换
      • 强制类型转换是一种编程操作,它将一个数据类型转换为另一个数据类型。
      • 在C语言中,强制类型转换是通过在需要转换的数据类型前面加上要转换成的数据类型来实现的,即使用括号将需要转换的值括起来,然后放在要转换成的数据类型的前面。例如,如果你有一个`double`类型的变量,你可以通过`(int)`来将它转换为`int`类型。
    • 2.4 数据的存储和排列
      • 大端模式:指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。
      • 小端模式:指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
      • 数据对齐:对于32位计算机,数据以边界对齐方式存储,半字地址一定是2的整数倍,字地址一定是4的整数倍,这样无论所取的数据是字节、半字还是字。均可一次访存取出。这样虽然浪费了一些存储空间,但是却提高了取指令和取数据的速度。
  • 三、浮点数的表示和运算
    • 3.1 浮点数的表示
      •  3.1.1 浮点数的作用和基本原理
        • 浮点数是一种对于实数的近似值数值表现法,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次指数得到。
        • 利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。
      • 3.1.2 浮点数规格化
        • 规格化是指阶码前面只有一位1的浮点数,其可以更精确地表示一个数值,并且能够更好地进行数值比较¹⁴¹⁵。
    • 3.2 浮点数标准 IEEE 754
      • IEEE 754规定了四种表示浮点数值的方式:单精确度(32位元)、双精确度(64位元)、延伸单精确度(43位元以上,很少使用)与延伸双精确度(79位元以上,通常以80位元实做)。
    • 3.3 浮点数的运算
      • 加减运算
        • 浮点数加减运算包括五个步骤:① 对阶 ② 尾数加减 ③ 规格化 ④ 舍入 ⑤ 判溢出。
      • 强制类型转换
        • 对于将整数类型int转换为浮点型float,我们可以使用强制类型转换的方式实现。例如:`int a = 10; float b = (float)a;` 在这个例子中,将整数类型的变量a转换为浮点类型的变量b

这篇关于计算机组成原理第二章数据表示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/506932

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit