二值信号容易被表示、存储和传输,比如穿孔卡上的有洞无洞,导线上的高低电压,对二值信号进行存储和执行的计算机的电子电路非常简单和可靠。制造商能够在一个单独的硅片上集成数百万甚至数十亿个这样的电路。单独的位没有意义,用一个二进制数字系统,能够用位组来编码负数,通过使用标准的字符码,能够对文档中的字母和符号进行编码。
2.1 信息存储
8位的块,即字节,是最小的可寻址的存储器单位,机器级程序把存储器视为一个非常大的字节数组,称为虚拟存储器,存储器的每个字节都由唯一的数字来标识,称为它的地址,所有可能地址的集合称为虚拟地址空间,虚拟地址空间是展现给机器级程序的概念性映像。
编译器和运行时的系统吧存储器空间或分为更好管理的单元,以存放不同的程序对象,即程序数据 指令和控制信息,可以用各种机制分配管理程序不同部分的存储,这种管理完全是在虚拟地址空间里完成的。
每个程序对象可以视为一个字节块i,程序本身就是一个字节序列。
指针与其他变量一样,有值和类型的属性。
2.1.1 十六进制表示法
2.2.2 字
2.1.3 数据大小
2.1.4 寻址和字节顺序
对于跨越多字节的程序对象,必须建立两个规则:这个对象的地址是什么,以及在存储器中如何排列这些字节。在几乎所有机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用的自己的中的最小的地址。
某些机器选择存储器中按照从最低有效字节到最高有效字节的顺序存储对象,另一些机器则按照从最高有效字节到最低有效字节的顺序存储,分别称为小端法和大端法。
对于程序员,他们机器所使用的的字节顺序是完全不可见的,但是有时候字节顺序会成为问题,在不同类型的机器之间通过网络传送二进制数据时,当小端法机器产生的数据被发送到大端法机器或者反方向发送时会发现,接收程序字里的字节成了反序,为了避免这类问题,网络应用程序的代码编写必须遵守已建立的关于字节顺序的规则,以确保发送方机器将他的内部表示转换成网络标准,而接收方机器则将网络标准转换为他的内部表示。
2.1.5 表示字符串
c语言中字符串被编码位一个以null(其值为0)字符结尾的字符数组,每个字符都由某个标准编码来表示,最常见的是ASCII字符码,十进制数字X的ASCII(单字节编码系统)的字符码是0x3x.在使用ASCII码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关,因此文本数据比二进制数据具有更强的平台独立性。
ps:编码
字符在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
2.1.6 表示代码
指令编码是不同的,不同的机器类型使用不同的且不兼容的指令和编码方式,即使完全一样的进程运行在不同的操作系统上也会有不同的编码规则,因此二进制代码是不兼容的,位二进制代码很少能再不同机器和操作系统之间移植。
从机器的角度看,程序仅仅是字节序列。
2.1.7 布尔代数简介
二进制值是计算机编码、存储和操作信息的核心。数学有很多0和1的研究,布尔运算把逻辑运算对应到了代数运算。取反 与或非 4种
2.1.8 C语言中的位级运算
2.1.9 C语言中的逻辑运算
2.1.10 C语言中的移位运算
2.2 整数表示
2.3 整数运算
2.4 浮点数
2.5 小结