1、整数的表示 大部分(所有?)机器 有符号数是补码表示。

2、整数的运算。+ -就是+-,按位加减,注意有符号和无符号的数值溢出,*/ 可以转换成移位等 同样是有位的截断,可以先十进制计算换成2进制再截断。

3、实际上是一种模运算,注意字长导致截断。

4、浮点数的表示:

单精度为例:32位,1位的符号位,8位指数位(无符号 书上说的实际值是他-127即范围是-127-128,网上是错的-128-127),23位的尾数,因为尾数小数点前是1,所以省略,计算时加1.

无穷和除 NaN 以外的其它浮点数一样是有序的,从小到大依次为负无穷,负的有穷非零值,正负零(随后介绍),正的有穷非零值以及正无穷。除 NaN 以外的任何非零值除以零,结果都将是无穷,而符号则由作为除数的零的符号决定。

回顾我们对 NaN 的介绍,当零除以零时得到的结果不是无穷而是 NaN 。原因不难理解,当除数和被除数都逼近于零时,其商可能为任何值,所以 IEEE 标准决定此时用 NaN 作为商比较合适。

5、特殊值:我们已经知道,指数域实际可以表达的指数值的范围为 -127 到 128 之间(包含两端)。其中,值 -127(保存为 全 0)以及 +128(保存为全 1)保留用作特殊值的处理。

6、非规范化数

我们来考察浮点数的一个特殊情况。选择两个绝对值极小的浮点数,以单精度的二进制浮点数为例,比如 1.001 × 2-125 和 1.0001 × 2-125 这两个数(分别对应于十进制的 2.6448623 × 10-38 和 2.4979255 × 10-38)。显然,他们都是普通的浮点数(指数为 -125,大于允许的最小值 -126;尾数更没问题),按照 IEEE 754 可以分别保存为 00000001000100000000000000000000(0x1100000)和 00000001000010000000000000000000(0x1080000)。

现在我们看看这两个浮点数的差值。不难得出,该差值为 0.0001 × 2-125,表达为规范浮点数则为 1.0 × 2-129。问题在于其指数大于允许的最小指数值,所以无法保存为规范浮点数。最终,只能近似为零(Flush to Zero)。这中特殊情况意味着下面本来十分可靠的代码也可能出现问题:

if (x != y) { z = 1 / (x -y);}

正如我们精心选择的两个浮点数展现的问题一样,即使 x 不等于 y,x 和 y 的差值仍然可能绝对值过小,而近似为零,导致除以 0 的情况发生。

为了解决此类问题,IEEE 标准中引入了非规范(Denormalized)浮点数。规定当浮点数的指数为允许的最小指数值,即 emin 时,尾数不必是规范化的。比如上面例子中的差值可以表达为非规范的浮点数 0.001 × 2-126,其中指数 -126 等于 emin。注意,这里规定的是"不必",这也就意味着"可以"。当浮点数实际的指数为 emin,且指数域也为 emin 时,该浮点数仍是规范的,也就是说,保存时隐含着一个隐藏的尾数位。为了保存非规范浮点数,IEEE 标准采用了类似处理特殊值零时所采用的办法,即用特殊的指数域值 emin - 1 加以标记,当然,此时的尾数域不能为零。这样,例子中的差值可以保存为 00000000000100000000000000000000(0x100000),没有隐含的尾数位。

7、有符号的零

因为 IEEE 标准的浮点数格式中,小数点左侧的 1 是隐藏的,而零显然需要尾数必须是零。所以,零也就无法直接用这种格式表达而只能特殊处理。

实际上,零保存为尾数域为全为 0,指数域为 emin - 1 = -127,也就是说指数域也全为 0。考虑到符号域的作用,所以存在着两个零,即 +0 和 -0。不同于正负无穷之间是有序的,IEEE 标准规定正负零是相等的。

零有正负之分,的确非常容易让人困惑。这一点是基于数值分析的多种考虑,经利弊权衡后形成的结果。有符号的零可以避免运算中,特别是涉及无穷的运算中,符号信息的丢失。举例而言,如果零无符号,则等式 1/(1/x) = x 当x = ±∞ 时不再成立。原因是如果零无符号,1 和正负无穷的比值为同一个零,然后 1 与 0 的比值为正无穷,符号没有了。解决这个问题,除非无穷也没有符号。但是无穷的符号表达了上溢发生在数轴的哪一侧,这个信息显然是不能不要的。零有符号也造成了其它问题,比如当 x=y 时,等式1/x = 1/y 在 x 和 y 分别为 +0 和 -0 时,两端分别为正无穷和负无穷而不再成立。当然,解决这个问题的另一个思路是和无穷一样,规定零也是有序的。但是,如果零是有序的,则即使 if (x==0) 这样简单的判断也由于 x 可能是 ±0 而变得不确定了。两害取其轻者,零还是无序的好。

8、NaN

NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。对于单精度浮点数,NaN 表示为指数为 emax + 1 = 128(指数域全为 1),且尾数域不等于零的浮点数。IEEE 标准没有要求具体的尾数域,所以 NaN 实际上不是一个,而是一族。

9、无穷

和 NaN 一样,特殊值无穷(Infinity)的指数部分同样为 emax + 1 = 128,不过无穷的尾数域必须为零。无穷用于表达计算中产生的上溢(Overflow)问题。比如两个极大的数相乘时,尽管两个操作数本身可以用保存为浮点数,但其结果可能大到无法保存为浮点数,而必须进行舍入。根据 IEEE 标准,此时不是将结果舍入为可以保存的最大的浮点数(因为这个数可能离实际的结果相差太远而毫无意义),而是将其舍入为无穷。对于负数结果也是如此,只不过此时舍入为负无穷,也就是说符号域为 1 的无穷。

10、尾数域为不全为 0 emin - 1 = -127,指数域全为 0,不存在,因为可以用非规范的表示。    我的理解。

11、浮点数的计算:这种运算通常伴随着因为无法精确表示而进行的近似或舍入。

+-:两浮点数进行加法和减法的运算规则是
设 Ex小于等于Ey,则 x±y = (Mx*2^(Ex-Ey)±My)*2^Ey,  舍入处理

http://blog.csdn.net/b2b160/article/details/4492519

http://www.cnblogs.com/kingwolfofsky/archive/2011/07/21/2112299.html

http://baike.baidu.com/view/339796.htm

转载于:https://www.cnblogs.com/wocgcow/p/5854823.html

信息表示和处理 from computer system chapter 2相关推荐

  1. 计算机英语system,电脑英语Computer System 计算机系统

    [ti:] [ar:] [al:] [by:] [00:13.30]听力课堂网(tingclass.net)Computer System Dialogue 1 [00:16.45]计算机系统 句型1 ...

  2. 计算机系统硬件类(Computer System Hardware Classes)

    计算机系统硬件类(Computer System Hardware Classes) Cooling Device Classes Class Description Win32_Fan Repres ...

  3. 转自http://www.blueidea.com/computer/system/2003/475_2.asp

    http://www.blueidea.com/computer/system/2003/475_2.asp

  4. xv6: a simple, Unix-like teaching operating system|Chapter 1 Operating system interfaces

    Chapter 1 Operating system interfaces 1.0 Overview ❓ Recall The job of an operating system How does ...

  5. CSAPP Computer System A Programmer Perspective

    同一个"数"绝对值的和 一个w位的数,最高位为1,解析为无符号数.无符号数后,两个数的绝对值的和为2^w. 例如: 1011,解析为无符号数为11,有符号数为-5,绝对值相加的和为 ...

  6. java getenv()_Java系统变量信息获取方法System.getenv()与System.getProperty()

    Java提供了System类的以下静态方法用于返回系统相关的变量与属性: System.getenv() 方法是获取指定的环境变量的值,大多与系统相关. System.getenv(String st ...

  7. Computer Systems A Programmer’s Perspective ----阅读翻译日志

    2019独角兽企业重金招聘Python工程师标准>>> 借助google 翻译读一下这本书吧,做个记录 Computer Systems A Programmer's Perspec ...

  8. java web 项目如何获取客户端登录帐号信息(用于SSO或其他)

    前言 在java 中可以通过System 获取操作系统的相关信息. 类似: String sys_user_name = System.getProperty("user.name" ...

  9. Chapter 30 Web Technology and DBMSs

    Chapter 30 Web and Technology and DBMSs chapter objectives /*本章目标*/ In this chapter you will learn: ...

最新文章

  1. html5盒子模型作业,html5 盒子模型案例
  2. dart 语言是jvm_Dart编译技术在服务端的探索和应用
  3. Linux ubuntu终端sh、bash、shell的联系与区别
  4. 物联网产品背后潜藏着危机
  5. 机器学习:SVM代码实现,第一个变量选择最偏离KKT条件的样本点,第二个变量随机
  6. Anu Has a Function CodeForces - 1300C(二进制位运算)
  7. 跨语言、多语言信息检索
  8. 用Java的Set实现交并差等集合运算
  9. Cisco 3550配置DHCP中继代理
  10. android 谷歌输入法切换,ANDROID谷歌拼音 输入法肿么切换?
  11. AgentWeb 更加简洁优秀的webview
  12. mysql 多表联合查询
  13. mantis apache mysql_Windows上基于Apache+Mysql+PHP安装集成Mantis+Testlink
  14. WIN10如果将电脑网络分享给iphone
  15. 浏览器打开html文件特别慢,打开网页慢是什么原因,教您打开网页慢怎么解决
  16. vue init webpack缺少标识符_Vue脚手架热更新技术探秘
  17. 【Python成长之路】快速理解复制、浅拷贝、深拷贝
  18. Firefox 59 正式发布:改进页面加载速度和屏幕截图工具
  19. 战略游戏——树形dp+状态机——没有上司的舞会翻版
  20. A16z:为什么 NFT 创作者要选择 cc0?

热门文章

  1. Android--添加子视图(addView和setView)
  2. Fibonacci(斐波纳契)数列各种优化解法
  3. golang中的互斥锁
  4. char和unsigned char
  5. 数据结构:单向环形链表
  6. java web一: xml
  7. c++中利用sizeof运算符计算结构体大小问题探讨
  8. 洞悉物联网发展1000问之从精益管理到互联工业带来的启示是什么?
  9. 实验1 C语言开发环境使用和数据类型、运算符、表达式
  10. Gradle 配置spring boot启动