20150207读书笔记<深入理解计算机系统2-1>
第二章
信息存储
(1)
多数计算机以一个字节作为最小可寻址的存储器单元。
机器级程序将存储器看成一个非常大的字节数组,称为虚拟存储器。
存储器的每个字节都由唯一的数字标识,称为它的地址。
所有可能地址的集合称为虚拟地址空间。
扩充:C语言中一个指针的值,无论它是指向一个整数,一个结构或是某个其他程序的对象,都是指针指向的存储块的第一个字节的虚拟地址。
C编译器还将每个指针和类型信息联系起来,这样就可以根据指针值的类型,生成不同的机器级代码来访问存储在指针指向位置的值,尽管如此,它生成的实际机器级程序并不包含指针类型信息,每个程序对象可以简单地视为一个字节块,程序本身就是一个字节序列。
(2)
字长:指明整数和指针数据的标称大小,由硬件决定。
决定虚拟地址空间的最大大小,因为虚拟地址空间是以一个字编码的。
(3)
char以存储文本串中的但个字符而得名,但也可以存储整数值。
Test:char s = x; //x∈[-128,127]正常整数值,其余截断显示数值
unsigned char s = x; //x∈[0,255)正常整数值,其余截断显示数值

程序员应该力图增强程序的可移植性,可移植的一个方面就表现在使程序对不同的数据类型的确切大小不敏感。
(4)
对于跨字节的程序对象,必须建立两个规则:一这个对象的地址是什么,二在存储器中如何让排列这些字节。
小端:低数据放在低地址。
大端:低数据放在高地址。
目前比较新的处理器使用 双端法 。
%.2x表示整数必须要用至少两个数字的十六进制格式输出。
十进制数字 X 的ASCII码正好是 0x3X。
ASCII码作为字符码在任何系统上都将得到相同的结果,与字节顺序和字大小顺序无关,因而,文本数据比二进制数据具有更强的平台独立性。
不同的机器类型,不同的操作系统,使用不同的且不兼容的指令和编码方式,因此二进制代码是不兼容的。
(5)
位向量:长度为W的0,1串。eg:a = [01010011] w = 8
位向量可用来表示有限的集合。用[Ai,A(i-1),...A1,A0]表示集合B{0,1,2,....i},当且仅当Ai = 1.使用这种编码集合,|和&等同于并和交。
eg:a = [01010001]表示集合A={0,4,6};
b = [01110110]表示集合B={1,2,4,5,6};
(6)
逻辑运算认为:0表示False,其余均表示1.
eg:!0x41 = 0 !0x00 = 1
逻辑运算对第一个参数求值能确定表达式结果时,不再对第二个参数求值。
(7)
移位运算,从左至右 结合。
特殊:算数右移K位,是在移出的K个高位补移动前最高位的数值。(对有符号整数的运算十分有用)
C标准并未明确定义应该使用哪种类型的右移。
对无符号数据,右移必须是逻辑右移。
实际中,几乎所有编译器都对有符号数采用算数右移。
当移位数K > 字长M,C标准规定,位移量为K % M,但也要尽量使移位量小于字长。
整数表示
尽管C语言标准并未指定有符号数采用哪种(原码,补码,反码)表示,但是几乎所有的机器都使用补码表示。
C库<limits.h>中定义了一组常量,来限定编译器运行的这台机器上不同整型数据类型的取值范围。
C语言有无符号数值转换的原则是,底层的位表示保持不变。
扩展:
有符号短数据SS---》无符号长数据UL:先将SS转换成有符号长数据SL,再将SL转换成UL.即先扩展大小再改变符号
eg:short s = x;
unsigned int p = s; //等价于 p = ( unsigned ((int)s) )
测试:

截断:
长数据L---》短数据S,进行位截断。
无符号数的截断为:L % (S类型的最大值)
有符号数:不仅数值大小可能变化,符号位也可能发生改变。
这两天虽然没有多大的进步,但是看了书就会觉得日子过得充实一些,在教5的509一群上自习的孩子,看到他们就像看到了压力,虽然我到现在才悟到自己和他们的差距还很大,希望每一天都能有一定的小进步,二叉树的C++版实现了,但是使用迭代器实现非递归遍历没有成功,明天早上一天的课,早点休息了~晚安了,亲爱的自己~哈哈哈~
20150207读书笔记<深入理解计算机系统2-1>的更多相关文章
- 20150206读书笔记<深入理解计算机系统>
●第一章 C是系统级编程的首选.C++显示支持抽象,属于应用级程序设计语言. 简单例子: 一个典型系统的硬件组成: 存储器的层次结构: 注:存储器层次结构的设计思想是,该层存储器作为下一层存储器的高速 ...
- 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游
本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...
- python 进阶读书笔记1 -- 理解python一切皆对象
理解python一切皆对象: 1.所有的类都是由type创建的 2.所有的类的基类都是object 3.type是类,也是实例,type的基类是object,type对象是由type创建的 4.obj ...
- 【读书笔记::深入理解linux内核】内存寻址【转】
转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...
- 【读书笔记::深入理解linux内核】内存寻址
我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell
当用户登录终端的时候,通常会启动一个默认的交互式shell.系统究竟启动哪个shell,这取决于用户配置.一般这个shell都是/bin/shell.默认的系统shell(/bin/sh)用于系统sh ...
- 读书笔记<深入理解JVM>01 关于OutOfMemoryError 堆空间的溢出
代码片段如下: package com.gosaint.shiro; import java.util.ArrayList; import java.util.List; public class H ...
- 读书笔记-深入理解JVM虚拟机-1.OOM初探
Java堆OOM(Out-Of-Memory)异常 执行例如以下程序,爆出异常 java.lang.OutOfMemoryError: Java heap space /** * VM Args:-X ...
- [转][读书笔记]深入理解java虚拟机
原文地址:http://blog.csdn.net/hanekawa/article/details/51972259 第二章 Java内存区域与内存溢出异常 一,运行时数据区域: 1. ...
随机推荐
- For,Function,Lazy
package com.dtgroup.study import scala.io.Source object ForFunctionLazy { def main(args: Array[Strin ...
- java-EL
语法 ¥{} 运算符 算数 加+.减-.乘*.除/.模% 比较 大于>.小于<.等于==.不等于!=.empty(判断是否为空,空位true,非空为false)(null 未实例化,&qu ...
- CPlus播放多媒体之播放声音
1.头文件需要<mmsystem.h>,但是之前需要包含<windows.h> 2.预处理#pragma comment<lib,"winmm.h"& ...
- pycharm下载 -professional
Jet Brains 开发的PyCharm 我传到百度云上了.只供开发使用,违者必究.大家一起学开发.有谁有python 进阶 电子书,可以发到我的邮箱里:120946018@qq.com,谢谢 Ma ...
- IUS tcl cmd
Incisive simulator中的command-line language基于TCL. Ncsim> command [-modifier] [-options] [arguments] ...
- Failed to execute request because the App-Domain could not be created.
原错误信息: 服务器应用程序不可用 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 Web 浏览器中的“刷新”按钮重试您的请求. 管理员注意事项: 详述此特定请求失败原因的错误 ...
- ql Server 高频,高并发访问中的键查找死锁解析
死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.但有时因为一些特殊应用场景如高频查询,高并发查询下由于数据库 ...
- LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
·First - 返回集合中的第一个元素:不延迟 ·FirstOrDefault - 返回集合中的第一个元素(如果没有则返回默认值):不延迟 ·Last - 返回集合中的最后一个元素:不延迟 ·Las ...
- javaIO框架小析
IO即数据读写.数据是应用的中心要素,而数据读写的能力和可扩展性是编程平台的基础支撑. 概念框架 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : ...
- window route 命令
使用 Route 命令行工具查看并编辑计算机的 IP 路由表.Route 命令和语法如下所示: route [-f] [-p] [Command][Destination] [mask Netmask ...