深入理解计算机系统 第二章信息的表示和存储、

引言:

这一章我们研究在计算机上如何表示数据和其他类型数据的基本属性,以及计算机对这些数据执行操作的属性。在整数运算中,重点描述无符号数和数的补码所表示的特性;而对于IEEE标准的浮点型数据,一是它是如何表示数据的,二是浮点运算的数学形式。

三种常见的数据类型:整数分为无符号数和有符号数。无符号数,表示大于或者等于零的数,基于传统的二进制表示法;有符号数表示正数或负数,通常用补码来表示,浮点数多为小数类型的值。
现代计算机信息的存储和表示通过二值信号0和1来表示,最小的单位为位,bit。单个的位并没有什么意义,但是将多个位按照一定的顺序连接起来,就能够表示有限集合的元素。 

2.1信息存储,主要讲计算机如何存储二进制的数据,例如小端法和大端法这两种存储方式,同时还讲了一些布尔代数运算的基础,这就是我们熟悉的位运算和位移运算(Bitwise>
> & Bit Shift)以及逻辑运算。
> 2.2整数表示,主要说明有符号数和无符号数那些实现原理,例如有符号数会涉及到补码(Two’s Complement)处理。
>  2.3整数运算,则具体描述计算机如何给二进制数据做加减乘除运算,这里面还会继续分别讲解有符号数和无符号数的处理。
>  2.4浮点数,则单独地讲解计算机如何表示有小数点的数据,并如何做运算,但最重要的是浮点数精度限制问题的讲解。


 2.1 信息存储

计算机中可寻址的最小地址单元为字节,存储器的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能地址的集合称为虚拟地址空间,包括随机访问存储器,闪存,内盘存储器等。

  • 十六进制表示

  十六进制数字:0 – F,例子:173A4C

 二进制数字:0 – 1,例子:0001 0111 0011 1010 0100 1100

 相互转换:十进制→ 十六进制:Mod(10,16)(倒序排列)

  • 字数据大小  

  字长决定的最重要的系统参数就是虚拟地址空间的最大大小。对于一个字长为ω位的机器而言,虚拟地址的范围就是0 ~ 2^ω - 1,程序最多访问2^ω个字节。

  • 寻址和字节顺序:

    多字节对象被存储为连续的字节序列,对象的地址为所用字节最小的地址。

    最低有效字节在最前面的方式,称为小端法。
    最高有效字节在最前面的方式,称为大端法。

  • 字符串表示:    

               每个字符用某个标准编码来表示,常见的为ASCII字符码。

  • 布尔运算

              ~非,&与,|或,^异或,位运算。

  • 逻辑运算

          逻辑运算认为所有非0参数表示TRUE,0表示FALSE。对应OR(||)、AND(&&)和NOT(!)。如果第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。    

  • 位级运算

       左移,x<<k,丢弃最高的k位,右端补k个零。右移分为逻辑右移和算术右移。逻辑右移在左端补0,算术右移在左端补最高位,在有符号的整数(最高位为1)移位时有区别。编译器默认为算术右移。当一次移位的k大于数的位数w时,C语言标准是移动k%w。

 2.2 整数表示

  • 整数分为无符号数和有符号数。

无符号数,表示大于或者等于零的数,基于传统的二进制表示法,如3表示为0011;

有符号数表示正数或负数,通常用补码来表示,有符号整数用补码编码,最高位为符号位,1表示负数,0为非负。负数的补码为原码的反码加1,正数的补码为本身。补码表示的范围,以4位为例,1000表示最小(-8),最大为0111(7),1111表示-1,0000表示0。

  • 有符号数和无符号数之间的转换

C语言允许在各种不同的数字数据类型之间做强制转换。

强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。

执行一个运算的时候,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式的将有符号数强制类型转换为无符号数,并假设两个数都是非负的,来执行运算。

  • 扩展一个数字的位表示

要将一个无符号数转换为一个更大的数据类型,只需要简单的在表示的开头添加0,这种运算被称为零扩展。

要将一个补码数字转换为一个更大的数据类型,可以执行一个符号扩展,在表示中添加最高有效位的值

 2.3. 整数运算

无符号加法:溢出直接去除高位。   
有符号加法:当做无符号数进行加法,溢出直接截断。
有符号的非:-x=~x+1,即等于按位取反再加1.
有符号数的乘法:x*y=(x的补码*y的补码)的补码
整数乘以常数:用移位和加法以及减小来代替乘法,无论x是无符号的还是有符号的,其计算结果一致。
整数除以常数:思路与乘法一致。有符号整数移位在小于0时会出现问题,当x<0时,x>>k的结果是x/(2^k)的向下取整,例如-12340>>4结果为-772,然而-12340/16应该是-771,这时C语言对其进行修改:(x<0?x+(1<<k)-1:x)>>k在x<0的情况下,加上(1<<k)-1的偏置量。

 2.4. 浮点数

符号位s:复数s=1,正数s=0

尾数M:是一个二进制小数

阶码E:对浮点数加权,权重为2,可以为负数

规格化的值

解码字段被解释为偏置形式表示的有符号整数。阶码的值是E = e - Bias,其中e是无符号数,而Bias是一个等于2^(k-1) - 1的偏置值。

小数子段frac被解释为描述小数值f,其中0 ≤ f < 1,二进制小数在最高有效为的左边。尾数定义为M = 1 + f。这种方式也叫做隐含的以1开头的表示。

非规格化的值

阶码值是E = 1 - Bias,而尾数的值是M = f,也就是小数字段的值,不包含隐含的开头的1。

非规格化数的另外一个功能是表示那些非常接近于0.0的数。它们提供了一种属性,称为逐渐溢出,其中,可能的数值分布均匀的接近于0.0。

浮点数的舍入: 默认为向偶数舍入法。

在C语言中,有两种浮点数float和double,舍入方法为向偶数舍入,

 整数和浮点数之间转换规则:
int转float不会溢出,可能被舍入。
double转float有可能溢出,可能被舍入。
float或double转int会向0舍入,例如1.9转为1,-1.9转为-1.可能溢出。
  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值