第三次

2.1信息存储

编写机器级程序的常见任务就是在位模式的十进制、二进制、十六进制之间人工的进行进制转换。

  • 十六进制表示法
  • 字: 字长:指明整数和指针数据的标称大小。字长决定最重要的系统参数就是虚拟地址空间的最大大小。
  • 数据大小:计算器和编译器支持不同方式编码的数字格式,也具有处理单个字节的指令或2字节,4字节,8字节整数的指令。
  • 寻址和字节顺序:最高有效位前八位和最低有效位后八位。是网络编程基础
  • 小端法:某些机器选择在存储器中按最低有效字节到最高有效字节
  • 大端法:某些机器选择在存储器中按最高有效字节到最低有效字节

小端法“高对高,低对低”大端与之相反。

  • 表示字符串:文本数据比二进制数据具有更强的独立性
  • 布尔代数:二进制是计算机编码存储和操作信息的核心。数电里学过布尔运算。我会。
  • C语言中的位级运算:C语言支持按位的布尔运算。与或非,异或同或

常见用法就是实现掩码运算。

  • C语言中的逻辑运算:&&与。||或。!非。
  • C语言中的移位运算:x<<k:左移k位。X>>k:右移

2.2整数表示

1.整型数据类型:根据字节分配,不同的大小所能表示的值的范围不同。 C 和C++默认支持有符号数和无符号数,Java只支持有符号数。

2.无符号数的编码:B2U4([0001])=0x2^3+0x2^2+0x2^1+1x2^0=1

3.补码编码:B2T4([1011])=-1x2^3+0x2^2+1x2^1+1x2^0=-5

最高位有效位也称符号位,权重为-2^w-1。符号位为1是负为0是正。

补码的范围不对称,是因为:一半的数的整数一半是负数,而0是非负
数。最大的无符号数值刚好比补码的最大值的两倍大一点。

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

5.C语言中的有符号数和无符号数:默认有符号,若想创建无符号常量必须加后缀U/u。

C语言转换的原则是底层的位保持不变。无到有:U2TW。有到无:T2UW

6.扩展一个数字的位表示:在不同字长的整数之间转换又保持数值不变。

0扩展:简单的在表示的开头加0。

符号扩展:将补码数字转换成更大类型的数据。规则在表中添加最高有
效位的值的副本。

7.截断数字:减少表示一个数字的位数。

2.3整数运算

1.无符号加法:可以被视为模运算形式,等价于计算和模2^w。在我的理解看来应该就是跟溢出差不多的性质。运算的溢出是指完整的整数结果不能存放到数据类型的字长限制中。

2.补码加法:负溢出得到的结果比整数和大16,正溢出得到的结果比整数小16.

3.补码的非&

4.无符号乘法计算公式。

5.补码乘法:给定长度的两个为位向量,无符号乘积的位级与补码乘积的位级表示是相同的,表明及其可以用一种乘法指令来进行有符号数和无符号数的乘法。无符号和补码乘积的低位是相同的

6.乘以常数:为了缩短计算时间,试着用移位和加法运算的组合来代替乘以常数的乘法。推理过程看书。

7.除以2的幂:除法比乘法的计算时间更长。除以2 的幂用右移而不是左移。同样推理过程仔细阅读书上的内容。

8.关于整数运算:整数运算实际是一种模运算。表示数字的有限字长限制了可能的取值范围,结果可能溢出。补码提供了技能表示正数也能表示负数的灵活方法,同时使用了与执行无符号算数相同的位级实现。

2.4浮点数

1.二进制小数:

与十进制小数类似,会转换就行。二进制小数点向左移动一位相当于这
个小数被2除,向右移动一位相当于该数乘以2。

2.IEEE浮点表示:标准 V=(-1)^sM2^E

其中:

    符号:s  决定这个数是正数还是负数。

    尾数:M 二进制小数。

    阶码:E  对浮点数加权,权重是2 的E次幂。

将浮点数的位划分成三段分别进行编码:

    一个单独的符号位直接编码符号。

    K位的阶码字段exp=ek-1……e1e0编码阶段

    N位小数字段

情况1:规格化的值。当exp的为模不全为1或0。阶码字段被解释为以偏置形式表示有符号整数。

情况2:非规格化的值:阶码域全为0。用途:提供了一种表示数值0的方法。表示非常接近于0.0的数。

情况3:特殊值:阶码域全为1。小数域全为0,得到的值表示无穷。在表示未初始化的数据时也很有用。

3.数字示例:k位阶码和n位小数的浮点表示的一般属性:

值+0.0总有一个全为0的位表示。

最小的正非规格化值的位表示,是由最低位为1而其他位为0构成的

最大的非规格化值的位表示,是由全为0的阶段字码和全为1的小数字段组成

最小的正规格化值的位表示,是由最低位为1而其他位为0构成的。

值1.0的位表示的阶码字段除了最高有效位等于0以外其他位为1.

最大的规格化值的位表示,符号位为0阶码的最低有效位为0,其他位为1.

4.舍入:浮点运算只能近似的表示示数运算想要找到最接近x的值就是舍入,问题的关键在于在两个可能的值中间确定舍入方向。

  向偶数舍入:也叫向最接近的值舍入。是默认方法。将数字向上或
向下舍入使的结果的最低有效数字是偶数。其他三种方式产生实际值的
确界。

5.浮点运算:IEEE的优势可以独立于任何具体的硬件或软件实现。

浮点加法不具有结合性但满足了单调性属性。

时间: 2024-12-28 17:45:17

第三次的相关文章

构建之法第三章读书心得

在构建之法第三章中,我们主要学习了个人能力的衡量与发展. 初级软件工程师有以下几个成长阶段:1.积累软件开发相关的知识,提升技术技能. 2.积累问题领域的知识和经验. 3.对通用的软件设计思想和软件工程思想的理解 4.提升职业技能 5.实际成果 软件开发的工作量和质量你的衡量标准:1.项目.任务有多大? 2.花了多少时间? 3.质量如何?交付的代码中有多少缺陷?

构建之法-第三周

构建之法第三章-软件工程师的成长 本章主要的理论和知识点是评价软件工程师水平的主要方法.技能的反面以及TSP对个人的要求. 首先,不同的数据能够从不同方面一个展示软件工程师的技术和能力,例如,通过完成时间平均值的比较,两位工程师或许能决出完成效率的高下,但通过比较方差则又能体现出的两位工程师的工作稳定性. 作为一个初级软件工程师,我们可以关注的成长有一下几个方面: 1.积累软件开发相关的知识,提升技术技能: 2.积累问题领域的知识和经验: 3.对通用的软件设计思想和软件工程思想的理解: 4.提升

我的第二次(四则运算、构建之法、三个软件)

一.代码的coding地址:https://coding.net/u/xuchunxiao119/p/homework_count/git#user-content-homeworkcount 二.<构建之法>读后问题以及感言: 1. 对于7.3MSF团队模型,7.2.6保持敏捷,预期和适应变化,中的"我们是预期变化,不是期望变化"我们如何让自己的软件处于不断的变化之中?换言之,我们如果推出了一款软件之后,如何给软件预留足够的更新空间,这些空间的具体位置我们如何得知呢? 2

一组阶段小记之读构建之法(三)

这周是本学期中的第10周,我们可以复习期中学习的内容,有些同学或多或少结束了几门选修课程,完成了体育测试 ,大家渐渐应该开始有更多的时间学习构建之法: 前几周我们对于构建之法这本书有了粗略的了解,比如:日后编程的工作,大都是多人合作写软件,那么有好的代码风格相当重要,这本书详细介绍了什么是好的代码风格,这让我有  了改进的方向日后工作,不再是自己写代码玩,而是要最大程度的满足顾客的需求.这本书详细讲述了如何获得顾客真正的需求,在做软件的同时要不断检验是否偏离了需求等等:书上的内容开始渐渐有了深度

谈谈我对构建之法这三章的理解

前言 在第一次作业中我便提过,刚进入大学时,我对未来充满了憧憬,我的人生有着很好的规划,也像我所规划的那样,我的大一过着学习,技术,学生工作有条不紊运行的状态,可是后来为了学生工作放弃了工作室,后来又因为一些原因失去了学生工作,我的人生仿佛失去了重心,浑浑噩噩度过了大二上学期,到了这个学期,上了软件工程导论这门课,我才意识到自己与别人的差距有多大,我下定决心从这学期开始恶补,一定要把差距拉小,直至没有差距.调整好了心态,我翻开了构建之法. 章节一.概论 1."软件=程序+软件工程"这是

阅读《构建之法(第三版)》提出的问题

通过两周的时间,我大致看完了<构建之法>,对此提出以下几点问题: 1.在第二章个人开发流程中对比了大学生和工程师分别完成项目的各个阶段所花时间的占比,得出现象工程师在“需求分析”和“测试”这两方面花的时间明显比大学生高,而在具体编码的时间却更少,从而得出结论:从学生到职业程序员,并不是更加没完没了地写程序——花在写代码的时间反而少了许多. 提出问题:我认为从学生到职业程序员,随着编程能力的提升,职业程序员在写具体代码中能更加轻松的实现,但是大学生由于各项能力的不足,花的时间明显更多.我认为这样

构建之法 第三次心得

构建之法 第四.五章心得 学习了第四第五章之后,我了解到了两人合作的注意要点,还有团队和开发流程.软件都是在相互合作中完成的,合作的最小单位是两个人.每个人的标准都不一样,对于什么是好的代码规范未必认同,所以我们需要给出一个基准线,即什么是好的代码规范和设计规范. 代码规范可以分成两个部分,一是代表风格规范,主要是文字上的规定,看似是表面文章,实际上非常重要.二是代码设计规范,牵涉到程序设计.模块之间的关系.设计模式等方方面面的通用原则.代码风格的原则是:简明.易读.无二义性.这里可以从几个方面

阅读&lt;构建之法&gt;第三10、11、12章并提出问题

<构建之法>第10.11.12章 第10章: 问题:对我们了解了用户的需求后,但是我们想法和做出来的软件会和用户的需求有偏差,比如风格.界面的修饰等等,那么我们程序猿怎样才能让自己的想法更加靠近用户的想法呢?是设身处境么? 第11章: 问题:我们现在这个阶段是在做四则运算APP,如果按照这章的步骤走下去,每天都要进行进度更新,和每日会议还有每日构建的,会不会不太符合我们现在的处境?毕竟我们的所有时间不能只为一门课程服务,还要大量的时间花在其他的课程上呢. 第12章: 问题:在实际的项目中,我们

构建之法前三章读后感

一. 软件作为一个产品,在提供用户使用前经历了许多工序,我们用工程的方式将开发软件的工序,过程加以工程化,系统化.成立了一套完整的体系后,有利于帮助我们开发软件,乃至于大型的系统. 软件具有一定的特殊性,使得软件工程师们做开发提升了一定的难度,但软件工程有助于软件系统的开发,帮助工程师们设计,构建,测试和维护软件.所以,软件工程的最终目的是帮助工程师们创造“足够好”的软件,提高软件的质量,用户满意度,可靠性,可维护性等. 第一章问题:怎么才算是一个真正的软件工程师? 二.   一个优秀的软件,通

构建之法第三章

本章为软件工程师的成长,主要介绍了评价软件工程师水平的主要方法,技能的反面,TSP对个人的要求. 软件开发流程:软件开发流程包括团队的流程,也包括个人的流程 初级软件工程师有几方面成长: 1.积累软件开发相关的知识,提升技术技能 2.积累问题领域的知识和经验 3.对通用的软件设计思想和软件工程思想的理解 4.提升职业技能 5.实际成果 衡量软件开发的工作量和质量的因素: 1.项目/任务有多大 2.花了多少时间 3.质量如何 4.是否按时交付 相对来说,交付时间的平均时间反应平均水平,而标准方差更