《深入理解计算机系统》——信息的表示和处理

一、信息存储

  • 系统将8位的块作为最小的可寻址存储器单位,机器级程序系统看成一个大的数组,然后通过地址来获得存储器中的这些块的内容。
  • 数据在计算机中的存储都是用二进制,不过二进制不易表示,一般我们用十六进制来表示。如八位的十六进制范围为00~FF。
  • 计算机的字长代表其整数数据的大小,同时也是系统絮凝地址空间最大大小。
  • C语言中对布尔代数的操作有提供几种方式,比如&(与),|(或),~(取反),^(异或)。

二、整数的表示

我们描述用位来编码证书的两种不同的方式:

一种只能表示非负数,另一种能够表示负数、零和正数.

C语言支持的数据取值范围:

2.1整型数据类型

C语言支持多种整型数据类型—–表示有限范围的整数.

每种类型都能用关键字来指定大小,如:char、short、long或者long long.

不同大小的分配的字节数会根据机器的字长和编译器有所不同.

根据字节分配,不同的大小所能表示的值的范围是不同的.

2.2无符号数的编码

无符号的二进制表示有一个很重要的属性,就是每个介于0~2^w-1之间的数都有唯一一个w位的编码值.

2.3补码编码

最常见的有符号数的计算机表示方式就是补码形式.

在这个定义中,将字的最高有效位解释为负权.

每个介于-2^(w-1)和2^w-1之间的整数都有一个唯一长度为w的位向量二进制表示.

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

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

2.5C语言中的有符号数与无符号数

  • C语言支持所有整型数据类型的有符号和无符号运算.
  • C语言标注没有指定有符号数要采用某种表示,但是几乎所有的机器都使用补码.
  • C语言允许无符号数和有符号数之间的转换.转换的原则是底层的位表示保持不变.

    2.6截断数字

    假设我们不用额外的位来扩展一个数值,而是减少表示一个数字的位数.在一台典型32位机器上,当把int X强制类型转换为short时,我们就将32位的int截断为16位的short int.这个16位的位模式就是-12345的补码表示.当把它强制转换回int时,符号扩展把高16位设置为1,从而生成-12345的32位补码表示.

三、整型的运算

我们首先要来理解一下“字节膨胀”的概念:

比如我们以w=4位为例,进行无符号数[1111]=15和无1.符号数[1010]=10的加法运算,结果为25=[11001]需要5位来表示结果,依次类推我们如果要完整的表示运算结果,就不能对字长做任何限制。大部分编程语言都选择了固定精度的加减乘除运算,会对结果进行一定的处理。也就与我们数学上的运算有所不同,这一节我们就来学习这些处理方法。

首先来看看加法运算:我们会接触到[无符号的加法]和[补码的加法]。这两组加法运算使用的是相同的机器指令。

3.1.无符号数的加法

相当于截断高位。溢出的真正含义就是:完整的结果不能放入到固定精度的字长中去,于是最高位就被丢弃掉了。减去2的w次方,相当于结果mod(2的w次方)。

3.2补码的加法:

举例说明:

正溢出[0101] +[0101] = 5 + 5 = 10 = [01010]截断最高位0结果为[1010]=-6;

负溢出 [1000]+ [1011]= -8 + -5 = -13 = [10011]截断高位1结果为[0011]=3.

主要的原因还是我们使用的是固定精度的运算,由于结果不能被完整的保存,我们就需要使用截断高位保存低位的方法。这样做由于正溢出是两个大正数相加,完整的结果仍然数正数,截断最高位相当于减少了2的w次方;而负溢出数两个大负数相加,完整的结果仍然数负数,截断高位1以后相当于加上了2的w次方。

3.3补码的非

以w=4位为例,补码的表示范围在[-8,7]之间,也就是说[-7,7]内的数可以表示为-x,但是对于最小的TMin=-8的情况怎么办呢?C语音中求解补码的方法是:每位求反,结果加1.

就如[0101] = 5 每位求反为 [1010] 再加上1为;

[1011]补码表示为-5。那么同样的方法计算[1000] = -8的求反[0111]再加上1的结果还是[1000] = -8我们就认为的定义了:-8的非就是-8,也就是上个算式中显示的内容了。

3.4整数运算总结

整数运算不论是加减乘除,其本身来说就是一种mod运算。由于结果的固定精度,大的就可能会溢出。补码和无符号数使用的是相同的机器运算指令,有相同的位级表示。特别是无符号数的一些意向不到的行为,程序员特别需要注意。

四、浮点数

4.1 IEEE浮点表示标准

说明:

符号(S):当s=1为负数,当s=0为正数;

尾数(M):表示从(1~2)或者(0~1)之间的数;

阶码(E):可以是负数

4.2 浮点数的数学属性

由于舍入而产生的丢失精度,浮点数的运算中不具有结合性

C语言中的浮点数使用注意事项:

时间: 2024-10-08 13:01:24

《深入理解计算机系统》——信息的表示和处理的相关文章

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的

查看Linux系统版本信息

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

java微信授权获取OPENID,ACCESS_TOKEN,用户信息

获取微信的openId流程 1.获取微信code 使用接口 : appId 是当前开发者的appId 不是用户的  path  是回调地址 这个链接是授权链接,当重定向这个链接的时候,会展示授权页,点击授权之后 跳入你path的请求接口    回调中带了一个参数code获取到就行 https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+path+"&

理解信息管理系统

1.信息与数据的区别是什么? 数据是记录客观事物,可鉴别的符号,而信息是具有关联性和目的性的结构化,组织化的数据.数据经过处理仍是数据,而信息经过加工可以形成知识.处理数据是为了便于更好的解释,只有经过解释,数据才有意义,才可以成为信息.可以说信息是经过加工以后,对客观世界产生影响的数据. 2.信息与知识的区别是什么? 信息是具有关联性和目的性的结构化,组织化的数据,知识是对信息的进一步加工和应用,是对事物内在规律和原理的认识.信息经过加工可以形成知识. 3.举一个同一主题不同级别的数据.信息.

调试信息的完成

gdb中-x是为了实现通过文件的初始化gdb GAS(gcc)(AT&T 语法),NASM(Intel 语法) 当boot loader 引导操作系统的时候,机器必须有如下的状态: EAX: 必须包含魔数OX2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot loader 引导的. EBX: 必须包含boot loader 提供的多重引导信息结构(见3.3 节多重信息引导结构)的32位物理地址. CS: 必须是32 位的读/执行的代码段,偏移是0 以及界限是 0X

20145225 《信息安全系统设计基础》期中总结

期中总结 一.常用命令总结 man -k: 常用来搜索,结合管道使用.例句如下: man -k k1 | grep k2 | grep 2 搜索同时含有k1和k2,且属于系统调用. 最后的数字意味着帮助手册中的区段,man手册共有8个区段,最常用的是123,含义如下: 1.Linux 2.系统调用 3.c语言 但是当单独用man语句的时候,想查看其中的单独某个区段内的解释时,用法是这样的: man 3 printf 即查找c语言中printf的用法. grep -nr 这条语句可以用来查找关键字

20145336张子扬 《信息安全系统设计基础》第7周学习总结

20145336张子扬 <信息安全系统设计基础>第1周学习总结 教材学习内容总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 三种常见存储技术:RAM.ROM和磁盘 随机访问存储器RAM分为静态RAM(SRAM)和动态RAM(DRAM) SRAM 用来作为高速缓存储存器,SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的.它可以无限制地保

小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议,arp协议属于二层协议,它是基于广播的,所以不可路由.而ICMP协议是可以路由的,理论上可以使用icmp协议发现全球的ip,如果没有边界防火墙(禁止icmp的探测包)进行过滤的话,对目标主机进行扫描,则会收到相应的响应,从而进行捕捉[有边界防火墙的现象比较普遍],但是三层发现的扫描速度也较二层要慢

20145317《信息安全系统设计基础》第六周学习总结(1)

20145317<信息安全系统设计基础>第六周学习总结(1) 第四章 处理器体系结构 指令体系结构:一个处理器支持的指令和指令的字节级编码 4.1Y86指令集体系结构 Y86:包括定义各种状态元素.指令集和它们的编码.一组编程规范和异常事件处理. Y86程序中的每条指令都会读取或修改处理器状态的某些部分.Y86具体包括:8个程序寄存器.3个条件码ZF\SF\OF.程序计数器(PC) Y86用虚拟地址引用存储器位置. 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态. 注意:条件

20145239 《信息安全系统设计基础》第5周学习总结

20145239<信息安全系统设计基础>第5周学习总结 教材学习内容 x86寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 8086的分段模式 IA32的带保护模式的平坦模式 机器级编程的两种抽象 -ISA(Instruction set architecture).ISA简单来说就是指令集体系结构.定义了处理机状态,指令格式以及指令对状态的影响.-机器级使用的存储器地址是虚拟地址. 机器代码中的处理机状态 程序计数器(PC)表示将要执行的下一条指令在存储器中的地址. 整数