Chapter2 信息的表示和处理

1.将一个十进制的数字x转换为n进制,可以用n反复除x,得到商q和一个余数r,然后用这个r作为最低位数字,反复这个过程直到商为0,则可以得到n进制的表示,其原理为:

x = a0nm + a1nm-1 +···+ amn0

2.每台计算机都有一个字长(word size),指明指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为w位的机器,虚拟地址的范围为0~2w-1

3.小端法:最低有效字节在最前面的方式;大端法:最高有效字节在最前面的方式。如何判断?

#include <stdio.h>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, size_t len) {size_t i;for(i = 0; i < len; i++)printf(" %.2x", start[i]);printf("\n");
}

4.左移和右移

(1)左移k位:丢弃最高的k位,并在右端补k个0

(2)右移分为逻辑右移和算数右移:

  1)逻辑右移k位:左端补k个0,抛弃最低的k位

  2)算数右移k位:左端补k个最高有效位的值,抛弃最低的k位

5.整数的表示

(1)无符号编码可以定义为一个映射B2Uw:{0, 1}w → { 0, 1,···, 2w-1 }

(2)补码编码可以定义为一个映射B2Tw:{0, 1}w → { -2w-1,···, 2w-1-1 }

(3)两种编码方式都具有唯一性(双射)

6.有符号数和无符号数之间的转换

处理同样字长的有符号数和无符号数之间的相互转换的一般规则是:数值可能会改变,但是位模式不变。记U2Bw和T2Bw将数值映射为无符号数和补码形式的位表示,则对于0 ≤ x ≤ 2w-1范围内的一个整数x,U2Bw会给出x的唯一w位无符号表示,T2Bw同理。

(1)补码转换为无符号数,对于TMinw ≤ x ≤ TMaxw的x,有

T2Uw(x) = x + 2w, x < 0; x, x ≥ 0

(2)无符号数转换为补码,对于0 ≤ x ≤ UMaxw的x,有

U2Tw(u) = u, u ≤ TMaxw; u - 2w, u > TMaxw

(3)当一个运算数是无符号的时候,另一个运算数也被隐式强制转换为无符号

(4)当一个有符号的short型转成unsigned int时,会先改变大小,再完成有符号到无符号的转换

7.扩展一个数字的位表示

(1)有符号数:符号扩展,即按最高有效位的值扩展

(2)无符号数:零扩展,即扩展位均为0

8.截断数字(截断为k位)

(1)有符号数:x' = U2Tk(x mod 2k),即x先看做无符号数,取模后再转换为有符号数

(2)无符号数:x' = x mod 2k

9.整数运算

(1)无符号数加法:对于满足0 ≤ x, y < 2w的x和y有

x + y = x + y, x + y < 2w; x + y - 2w, 2w ≤ x + y < 2w+1(算数溢出)

(2)有符号数加法:对于满足-2w-1 ≤ x, y ≤ 2w-1-1的x和y有

x + y = x + y - 2w, x + y ≥ 2w-1(正溢出); x + y, -2w-1 ≤ x + y ≤ 2w-1-1(正常); x + y + 2w, x + y < -2w-1(负溢出)

总结:整数加法运算溢出时,采用截断策略

(3)补码的非:对于满足-2w-1 ≤ x ≤ 2w-1-1的x,其补码的非由下式给出

-x = -2w-1, x = -2w-1; -x, x > -2w-1

实际上,-x与~x+1得到的结果一样

(4)无符号数乘法:对于满足0 ≤ x, y < 2w的x和y有

x * y = (x * y) mod 2w

(5)有符号数乘法:对于满足-2w-1 ≤ x, y ≤ 2w-1-1的x和y有

x * y = U2Tw((x * y) mod 2w)

总结:整数乘法运算溢出时,同样采用截断策略

10.乘以常数

大多数机器上,乘法指令相当慢,需要10个或者更多的时钟周期,比移位和加法的代价要大得多,编译器会试图以移位、加法和减法的组合来消除很多整数乘以常数的情况,如将a × 14表示为(a << 3) + (a << 2) + (a << 1)

11.除以2的幂

(1)规则为:向下舍入一个正值,向上舍入一个负值

(2)无符号数就是简单的算数右移操作。而有符号数的除法,对于x ≥ 0,效果与逻辑右移相同;对于x < 0,使用(x + (1 << k) - 1) >> k产生结果,从而得出符合(1)中规则的结果

12.浮点数

(1)IEEE浮点数的表示:V = (-1)s × M × 2E,这里s为符号位,决定数是负数(s = 1)还是正数(s = 0);尾数M表示一个二进制小数,范围为1~2-ε(规格化)或0~1-ε(非规格化);阶码E的作用是对浮点数加权

(2)32位浮点数包含:1位符号位 + 8位阶码 + 23位尾数;64位浮点数包含:1位符号位 + 11位阶码 + 52位尾数

(3)阶码的值决定了这个数是规格化的(不全为0)或非规格化的(全为0)或特殊值(全为1)

(4)非规格化的浮点数表示0或接近0的数

(4)对于规格化的浮点数,阶码的值是E = e - Bias,这个Bias为一个偏置值2k-1-1,且总能通过调整E,使得尾数是以1开头的,也就是1.fn-1fn-2...f0,这样做可以省去表示1的那位,可以多表示一位精度

(5)对于非规格化的浮点数,阶码的值是E = 1 - Bias,不用-Bias表示是因为用1-Bias可以和规格化浮点数对接起来,实现平滑的转变;尾数没有隐藏位,因此是从0开始到1-ε

转载于:https://www.cnblogs.com/cedriccheng/p/9563073.html

深入理解计算及系统 Chapter2 学习笔记相关推荐

  1. 百度计算广告学沙龙学习笔记 - 内容匹配广告

    百度计算广告学沙龙学习笔记 - 内容匹配广告 时间 2014-02-05 18:53:55 CSDN博客 原文  http://blog.csdn.net/three_body/article/det ...

  2. 《深入理解LINUX内存管理》学习笔记(一)

    引子 为什么要写这个笔记: 1,这本书的中文版翻译了太垃圾,没法阅读.阅读英文原版,可以很好的理解作者的思路.作此笔记备忘 2,一直以来学习LINUX kernel的知识缺乏系统化,借对这本书的学习, ...

  3. 后台系统可扩展性学习笔记

    整理了一下笔记目录,将以前学习的一些知识串联起来了,比如cdn.负载均衡.中间件,以前只是各自了解了一点,现在大概理清了后台系统设计中他们各自的作用. 后台系统可扩展性学习笔记(一)概要 后台系统可扩 ...

  4. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  5. 计算机组成原理 | 第八章《计算机的外围设备》、第九章《输入/输出系统》 学习笔记

    计算机组成原理 | 第八章<计算机的外围设备>.第九章<输入/输出系统> 学习笔记 引言 & 声明 第一章 计算机系统概论 第二章 计算机中数据的表示方法 第三章 运算 ...

  6. CIM系统导论学习笔记

    CIM系统导论学习笔记 企业管理的基本概念与企业运作 信息与信息技术 大数据 信息技术支持下的企业创新 企业管理信息系统 工程设计分系统 制造自动化系统 CIMS的组成和集成 CIM是组织现代化生产的 ...

  7. 快餐店收银系统Pos学习笔记

    #快餐店收银系统Pos学习笔记 ##第一节mockplus 这是一个产品经理使用的软件,可以大概地做出网页样式. ##第二节安装vue-cli环境 mpm install vue-cli -g 全局下 ...

  8. 嵌入式系统设计师学习笔记①:数的进制转换

    嵌入式系统设计师学习笔记:数的转换 进位计数制系统的基本概念:数制,基数,数码,数位,位权 制作了个表格如下: 在十六进制中:A-10,B-11,C-12,D-13,E-14,F-15. 举例各种进制 ...

  9. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

最新文章

  1. python基础教程 下载-Python基础教程第3版中国PDF电子书免费下载
  2. jenkins docker 自动部署 构建_jenkins+docker+vue项目的自动部署环境
  3. kaldi 源码分析(七) - HCLG 分析
  4. 【Tyvj1783】【codevs2418】【BZOJ1856】字符串,厉害的组合数与模型转换
  5. 斯坦福 CS183 Peter Thiel 创业课资料整理
  6. MQ(队列消息的入门)
  7. C#添加二维码带加密带logo
  8. java实现日历打印项目
  9. Proxyee-down 3.x的下载与安装
  10. #!/usr/bin/env node 到底是什么
  11. MNL——多项Logit模型学习笔记(二)
  12. Python自然语言处理实战(1):NLP基础
  13. 服务器防火墙怎么关闭?
  14. 极大似然估计原理详解
  15. 屏蔽北京IP 外地正整打开
  16. 11. 爬虫训练场,学校数据分页呈现,Bootstrap5 媒体组件
  17. 使用Java统计某个目录下各种类型文件的数量
  18. Sql2005安装错误:1406
  19. position:fixed定位后下面紧接着div等元素的问题
  20. 有哪些文档和知识管理工具推荐? - 易智编译EaseEditing

热门文章

  1. 如何去除Android应用中的广告
  2. 怎样给 ActiveX 控件签名并打包发布
  3. SGI opengl source code download
  4. HTML DOM 入门知识点总结
  5. 【jQuery笔记Part1】05-jQuery解决冲突
  6. 量化策略回测ocobreak
  7. mysql日志文件转存_【转】Mysql日志文件
  8. 有了数据湖,距离数据仓库消失还有几年?
  9. 5个让IT开发效率提高200%的工具,最后一个很实用,你用过几个
  10. 2020运动相机推荐_2020年优秀户外运动相机推荐