首页 > 其他分享 >深入理解计算机系统-第2章信息的表示和处理

深入理解计算机系统-第2章信息的表示和处理

时间:2022-10-14 18:12:02浏览次数:87  
标签:计算机系统 字节 单精度 浮点数 times 理解 深入 127 规格化

关于程序的结构和执行,我们需要考虑机器指令如何操作整数和实数数据,以及编译器如何将 C 程序翻译成这样的指令。

现代计算机存储和处理信息是用二进制(二值信号)表示的,因为二值信号更容易表示、存储和传输,如导线上的高电压和低电压。

1,信息存储

大多数计算机使用字节(byte),作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存virtual memory),内存中的每个字节都由一个唯一的数字来表示,称为它的地址(address),所有可能地址的集合称为虚拟地址空间virtual address space)。简而言之,这个虚拟地址空间只是一个展现给机器级程序的概念性映像,实际的实现是将动态随机访问存储器(DRAM)、闪存、磁盘存储器、特殊硬件和操作系统软件结合起来,为程序提供一个看上去统一的字节数组。

1.1,十六进制表示法

一个字节由 8 位组成,在二进制表示法中,它的值域是 \(00000000_2\sim 11111111_{2}\),如果看成十进制整数,它的值域则是 \(0_{10}\sim 255_{10}\)。在 C 语言中,以 0x 或 0X 开头的数字常量被认为是十六进制的值。

image

1.2,字数据大小

每台计算机都有一个字长(word size),说明指针数据的标称大小(nominal size),字长决定的最重要的系统参数就是虚拟地址空间的最大大小,即对于一个字长\(w\)位的机器而言,虚拟地址的范围为 \(0\sim 2^{w}-1\),程序最多访问 \(2^{w}\)个字节。

1.3,寻址和字节顺序

对于跨越多个字节的程序对象,我们必须建立两个规则: 这个对象的地址是什么,以及内存中如何排列这些字节。对象的存储有两个通用的规则:

  • 小端法(little endian),最低有效字节在最前面的方式。
  • 大端法(big endian),最高有效字节在最前面的方式。

image

2,整数表示

3,整数运算

4,浮点数

IEEE 754 标准同来表示计算机系统中的浮点数定义,即浮点数规则都遵从 IEEE 754 标准。

4.1,二进制小数

理解浮点数的第一步是考虑含有小数值的二进制数字,其表示方法如下:

\[b = \sum_{i=-n}^{m} 2^{i} \times b_{i} \]

符号 . 现在变成了二进制的点,点左边的位的权是 2 的正幂,点右边的位的权是 2 的负幂。小数的二进制幂表示如下图所示。

image

4.2,IEEE 浮点表示

定点表示法不能有效地表示非常大的数字。IEEE 标准 754,浮点表示用 \(V = (-1)^s \times M \times 2^E\)表示一个数:

image

在 IEEE 754 标准中浮点数由三部分组成:符号位(sign bit),有偏指数(biased exponent),小数(fraction)。浮点数分为两种,单精度浮点数(single precision)和双精度浮点数(double precision),它们两个所占的位数不同。

  • 在单精度浮点格式(C 语言的 float)中,符号位,8 位指数,23 位有效数。
  • 在双精度浮点格式(C 语言的 double)中,符号位,11 位指数,52 位有效数。

image

给定位表示,根据 exp 的值,被编码的浮点数可以分成三种不同的情况(最后一种有两个变种)。图2-33说明了对单精度格式的情况。

image

规格化的值产生的指数的取值范围,对于单精度是 -126~127,而对于双精度是 -1022~1023

image

4.3,浮点数的规格化

若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如 \((1.75)_{10}\)可以表示成 \(1.11\times 2^0\),\(0.111\times 2^1\),\(0.0111\times 2^2\)等多种形式。当尾数不为 0 时,尾数域的最高有效位为 1,这称为浮点数的规格化。否则,以修改阶码同时左右移动小数点位置的办法,使其成为规格化数的形式。

1,单精度浮点数真值

对于浮点数的规格化的值,其指数的偏差 Bias 是其可能值的一半: \(2^{k-1}-1\)(单精度是127,双精度是 1023)。 也就是说,用存储的指数减去此偏差就得到了实际指数。 如果存储的指数小于此偏差,则实际为负指数。

IEEE754 标准中,一个规格化的 32 位浮点数 \(x\) 的真值表示为:

\[x = (-1)^{S}\times (1.M)\times 2^{e}, e = E-127, e\in [-126, 127] \]

其中尾数域值是 1.M。因为规格化的浮点数的尾数域最左位总是 1,所以这一位不予存储,默认其隐藏在小数点的左边。在计算指数 e 时,对阶码 E 的计算采用原码的计算方式,因此 32 位浮点数的 8 bits 的阶码 E 的取值范围是 0 到 255。其中当 E 为全 0 或者全 1 时,是 IEEE754 规定的特殊情况。去除 0 和 255 这两种特殊情况,那么指数 \(e\) 的取值范围就是 \(1-127=-126\) 到 \(254-127=127\)。

因为 \(2^{127}\) 大约等于 \(10^{38}\),所以单精度的实际极限为 \(10^{38}\) (\(e^{38}\))。

2,双精度浮点数真值

64 位的浮点数中符号为 1 位,阶码域为 11 位,尾数域为 52 位,指数偏移值是 1023(指数偏差)。因此规格化的 64 位浮点数 x 的真值是:

\[x = (-1)^{S}\times (1.M)\times 2^{e}, e = E-1023, e\in [-1022,1023] \]

因为 \(2^{1023}\) 大约等于 \(10^{308}\),所以单精度的实际极限为 \(10^{308}\)(\(e^{308}\))。

4.4,数字示例

图 2-34 展示了一组数值,它们可以用假定的 6 位格式来表示,有 \(k=3\)的阶码位和 \(n=2\)的尾数位,偏置位是 \(2^{3-1}-1 = 3\)。

image
image

4.5,浮点数的数值范围

下图 2-36 展示了单精度和双精度的浮点数取值范围。

image

参考资料

标签:计算机系统,字节,单精度,浮点数,times,理解,深入,127,规格化
From: https://www.cnblogs.com/armcvai/p/16792462.html

相关文章

  • 深入理解计算机系统-第1章计算机系统漫游笔记
    深入理解计算机系统-计算机系统漫游笔记.md1,信息就是位+上下文计算机系统是由硬件和系统软件组成,它们共同工作来运行应用程序。C语言是系统级编程的首选,同时它也非常......
  • 泛化误差的理解
    最终目的是学习一个模型使其更加接近这个真实模型。 方差的含义:方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。偏差的含义:偏......
  • 看一遍就理解:IO模型详解
    前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll......
  • 看一遍就理解:动态规划详解
    前言我们刷leetcode的时候,经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。今天跟大家一起来学习动态规划的套路,文章如果有不正确......
  • 看一遍就理解:MVCC原理详解
    前言MVCC实现原理是一道非常高频的面试题,最近技术讨论群的小伙伴一直在讨论,趁着国庆节有空,我们一起来聊聊。1.相关数据库知识点回顾1.1什么是数据库事务,为什么要有事务......
  • 继承与多态4 在实践中理解把握复杂的知识
    总结(1):子类父类拥有同名的方法时……当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是......
  • SAP UI5 Simple Form 属性 columnsL,columnsM,columnsXL 的属性深入剖析试读版
    一套适合SAPUI5初学者循序渐进的学习教程本专栏计划的文章数在​​300​​​篇左右,到​​2022年9月22日​​​为止,目前已经更新了​​133​​​篇,专栏完成度为​......
  • 深入理解css 笔记(4)
    处理元素高度的方式跟处理宽度不一样。之前对border-box的修改依然适用于高度。而且很有用,但是通常最好避免给元素指定明确的高度。当明确设置一个元素的高度时,内容可能......
  • SpringBoot深入理解
    当使用打包时,会下载org-springframework-boot-loader的jar,并且不会放在lib存放的第三方jar包文件中,该jar包中有个JarLauncher.class文件中设置了jar包运行时的入口和打包后......
  • 认识理解并运用FPGA中的存储器
       需要用一个存储器将这些数据先存储起来,使用的时候读取存储器就可以了。这个存储器只需要支持读功能就可以了。ROM(readonlymemory)对应CMOS摄像头初始化的应用D......