最近在深入学习计算机系统。很多的基础都忘记了。所以现在复习了一遍。
教材是《深入理解计算机系统》英文简写《CSAPP》
1、首先,无论是什么信息,在计算机中的表示都是0,和1组成的。那么这些0和1是怎么存储的呢?
当然,0和1只是一个表示符号,我们在实际中,可能用电位高低表示0和1,或者用时光盘的凸凹等等。
我们现在要说的,是抽象了一个层次的,就是这些无论如何表示0和1的信息,如何在计算机中存储的?
内存,你也许第一反应。对,信息是存储在内存中的,对于机器及程序来说,他把一个巨大的数组看做是一个虚拟存储器,而且,大多数的计算机都把这个虚拟存储器以8位来分一个块。每个块标识一个地址,这些地址组合起来形成虚拟地址空间。然后呢,我们的内存条,通过操作系统和她自身硬件的结合,来实现了我们对虚拟存储器的构想,使她看上去就是一个字节数组。
2、进制转换。由于我们熟悉的十进制在只有0和1的计算机世界里不能表示了,于是我们就用二进制吧。
例如: 十进制数 8 的二进制表示为 1000,十进制数 98的二进制表示为 1100010
这样的表示可能在我们看来很费解,但是计算机只能这么表示。而我们呢,需要定义一些法则来使得计算机能理解这些数字。
下面我们看一下二进制和十进制是如何转换的:
二进制到十进制
例如二进制 1100010
十进制到二进制转换
98 = 49* 2 + 0
49 = 24* 2 + 1
24 = 12* 2 + 0
12 = 6* 2 +0
6 =3 * 2 + 0
3 = 1* 2 + 1
1 = 0 *1 +1
所以,
是不是感觉比较复杂,其实也不是,当时,为了这种转换更简单,我们用16进制代替10进制,因为从2进制到16进制的转换更容易。
首先16进制是使用0,1,2,3,……,9,a,b,c,d,e,f十六个符号表示的。一般在c语言中,使用0x开头表示十六进制,例如0x57E8b
这里对于A-F,大小写都可以。那么二进制如何与16进制转换呢?
看下表:
我们只要对照上表,把每个字符用二进制位表示就行了。
例如 0x5a = 01011010(2)
虚拟存储和进制的问题都完了,现在我们需要考虑,如何表示一个整数呢?
3,字长。(word size)一个机器的字长,指明了整数和指针的标准大小。所以字长决定了虚拟空间地址的大小。
一个字长为n的机器,可以编码的虚拟地址空间就是2n - 1 (从0开始)。我们目前大多数的32位机器(如果是64位的,装了32位的操作系统的话,字长也只能看做是32位)的虚拟地址空间最大就是4GB。
知道了字长,下面我们要看数据了。一般而言,不同的语言有不同的数据类型。c语言的整数类型,就是用一个字长来表示。在32位机器上,就是32位,4字节。事实上,不同的数据类型可能使用不同的位长度来表示。下面是c语言在不同字长机器上的数据类型长度。
以字节为单位。
使用c函数
sizeof(int)可以查看int在相应的机器上需要的字节数。当然也可以用sizeof(void *), sizeof(float),sizeof(double)
由上表可知,int和char *在32位机器上有相同的字节长度。很多时候,我们使用一个int来存放一个指针,而这样的程序如果移植到64位机器上,就会出问题了。
现在我们了解数据类型的大小了,但是我们的虚拟存储单位是byte的,如果要存一个int型数据,那么需要4个byte,这就产生一个问题,这4个byte中存放数据的顺序问题。
设 int d = 0x01234567,我们存放的地址是 0x100,0x101,0x102,0x103 这4个byte单元中。则有以下两种方法。
大端法(big endian)
小端法(little endian)
IBM ,Motorola 使用的大端法,Intel的多数使用小端。关于我们的机器大端还是小端,我们可以写个小程序测试。
//待插入程序
在网络数据传输时,如果大端小端各自为政,就会出大问题了。所以我们有网络字节码。
为了方便学习,我们可以用下面的代码来查看各种数据是如何存储的。
//待插入程序
太晚了,先睡觉。
只能这样编辑了。
有了上面的程序,我们就可以以字节为单位来看数据了。下面马上来一个测试程序
随便输入一个数字测试吧。记住,我们打印出来的是以16进制表示的。%.2x就是用两个16进制字符表示。
程序就不多说。看效果吧。例如我们输入12345,十六进制表示为 0x00003039
我们的测试使用Linux系统,WindowsNT,Sun主机,Alpha主机
这下明白了。注意int和float的表示看起来很不同,如果你把他们的二进制形式写出来,你会有发现的。这是后话。
留在IEEE浮点表示时再说。
位操作
由于计算机使用的是二进制表示,我们的编程语言也提供了相应的位操作。这就是位运算。
四种运算
1、~运算,求反。 ~0 = 1 ; ~1=0
2、&与运算。 1&1 = 1;1&0 = 0 ; 0&1 = 0; 0&0 = 0
3、|或运算。 1|1 = 1; 1|0 = 1; 0|1 = 1; 0|0 = 0
4、^异或运算。 0^0 =0; 1^1 = 0; 0^1 = 1 ; 1^0 =1
这些运算和布尔代数类似,但是我们要分清位运算和逻辑运算。下面是逻辑运算
1、!运算Not 。 !0 = 1, !5 =0
2、&& 运算And
3、| 运算OR
4、⊕ 运算 EXCLUSIVE-OR
逻辑运算不用转换为二进制,而是对表达式判断真假。
使用位运算和逻辑运算,我们可以表达一个 x==y这样的判断。大家可以先考虑下如何用位和逻辑运算表达。
我们常用位运算来实现掩码运算。例如在网络中通过子网掩码来确定网络地址。
这就是如果我们想要得到一个字节中的某几位(高位或者低位)的有效字节。例如0xFF,这个掩码表示一个低位有效字节。
使用 x & 0xFF就可以把x的高位字节置零,只留下低位字节。
注意,如果我们需要高位的有效位,那么我们的掩码可能写成 0xFFFF0000,但是这样的掩码只对32位的机器起作用。
我们可以这样写,~0xFFFF,这样生成的掩码将可被移植到不同位的机器上。
位运算还有位移运
左移 右边补零。每移动k位,可以看成 乘以 2k
算术右移 左边补符号位(这将要在下面讲到)
逻辑右移 左边补零。
移位运算可以大大提高性能。例如 x*7 这样的乘法运算,我们可以 用 x <<3- x来代替。这样性能将会大大改善。
上面我们展示了int,float等在内存中的表示,现在我们来看看这些整数是如何被编码的,比如,如何表示一个负数,还有两个
int数相加是否和我们在纸上运算的一样?
请看下一篇:整数的表示
分享到:
相关推荐
进制数的概念和计算机内部信息表示的方法;计算机系统的结构及工作原理;与计算机软件相关的基础知识;应用软件的类型及应用领域;多媒体计算机的基本概念;计算机文化和计算机安全的基本知识. 计算机文化基础-基础...
第二节 计算机的硬件系统 计算机硬件是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。1.中央处理器(CPU)【010201】 专门用来完成读取指令和执行指令的部件称为中央处理器(Central ...
计算机中常用二进制、八进制、十进制和十六进制表示信息,其中最常用的是表示 计算机内部存储和处理信息的二进制和为了清晰和简洁表示二进制而采用的十六进制。 7. 字符编码:使用二进制数对字符进行的编码称字符...
A、计算机系统 B、网络适配器 C、传输介质 D、数字摄像机 20、下列()软件可以在Internet实现"即时通讯"。 A、Telnet B、LNET C、MSN D、USENET 21、以下说法正确得就是()。 A、在Word中新建文档会替代原来...
第1章 计算机基础知识 学习目标: 通过本章学习使学生掌握计算机基本概念、计算机系统组成、计算机各大硬件设备、 计算机的数制和信息的表示与存储,并熟悉计算机的产生、发展、特点和应用领域,了 解计算机中字符...
三、课程内容和掌握程度 《计算机基础》课程主要内容包括:计算机信息技术导论、计算机系统概述、计算机 操作系统基础、Windows XP操作系统应用、Office办公自动化软件、Microsoft Word文字处理程序、Microsoft ...
答:中央处理器 2、计算机安全包括实体安全、系统安全和______________。 答:信息安全 3、DNS是______________。 答:计算机域名 (Domain Name System) 的缩写 4、在使用IE浏览器下载网页时,按______________键...
本文结合计算机系统所学知识,以hello.c程序为例,阐述它在从编写到运行终止的一生历程,主要包括预处理、编译、汇编、链接、进程管理、存储管理、IO管理,掌握计算机的信息表示及处理、程序的机器级表示、处理器...
计算机的基本组成及工作原理教学设计 【教学目标】 知识与技能:掌握计算机的组成,理解计算机系统中信息的表示,了解计算机的基本工 作原理。 过程与方法:向学生展示拆卸的旧电脑部件及未装任何系统的电脑,通过...
《计算机应用基础》在线平时作业1 试卷总分:100 得分:100 一、单选题 (共 25 道试题,共 100 分) 1.以下属于中文输入法的是____。 <-A.->五笔字型 <-B.->搜狗输入法 <-C.->智能ABC <-D.->以上皆是 <参考选择是>:D 2....
信息处理的过程主要包括信息的获取、储存、加工、发布和表示。 信息技术教育 信息技术教育为学习者提供资源(这里的资源指的在学习过程中可被学习者利用的与信 息技术有关的一切要素)和环境,具有与其他科学整合的...
arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息 start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令 mem 查看cpu...
如P 、P 计算机 2、存储器:是存储各种信息和处理结果的装置。分为主存储器和辅助存储器 存储器的容量基本单位是字节(B),常见的容量单位有KB(千字节),MB(兆字节),GB(千兆字节) 1GB = 1024MB,1MB= 1024KB...
每个领域由一个两个字母的缩写词表示,比如OS代表操作系统,PL代表程序设计语言,领域之下又被分割成更小的单元(units),代表领域中单独的主题模块。每个单元都用一个领域名加一个数字后缀表示,比如OS3是关于并发...
目录 计算机概述 数制与编码 计算机中字符的编码 指令和程序设计语言 计算机系统的组成 微型计算机的硬件系统 多媒体技术简介 计算机病毒及其防治 计算机应用基础知识(共59张PPT)全文共59页,当前为第2页。 一、...
学习领域 计算机应用基础 总 课 时 32学时 学习情境1 计算机基础知识 情 境 课 时 2学时 学 习 目 标 教 学 案 例 认识计算机的发展 了解计算机中信息的表示和存储 认识多媒体技术 认识计算机的硬件系统 认识计算机...
e. 如有可能,请建立一个存储商品名称和数量的文本文件,并为二叉搜索树建立一个成员函数SetupInventory(),用于从该文本文件中读取库存商品的数据, 实验报告要求: 1、 按要求记录下二叉搜索树的完整实验...
计算机是电子数字计算机的简称,是一种能自动地、高速地进行数值运算和信息处理的电子设备。它主要由一些机械的、电子的器件组成 ,再配以适当的程序和数据,程序及数据输入后可以自动执行,用以解决某些实际问题。...