C语言是当前所有开发技术中使用较为广泛的一门语言,从它诞生之日起就深受程序员的喜爱。随着C语言的普及,后来的开发语言都或多或少地借鉴或遵循了它的一些模式。另外,C语言是计算机编程领域中使用最早的高级语言之一,它的出现推动了软件行业的迅猛发展。本章将简要介绍C语言的基本知识,为读者学习后面的内容打下基础。
1.1 计算机应用基础
计算机(computer)是一种能接收和存储信息,并按照内部存储的程序对输入的信息进行加工、处理,然后把处理结果进行输出的高度自动化的电子设备。本节介绍计算机应用的基础知识,为读者学习后面的知识打下基础。
1.1.1 中央处理器
中央处理器就是我们平常说的CPU(Central Processing Unit),是一块超大规模的集成电路,是计算机的运算核心和控制核心。它主要包括算术和逻辑单元(Arithmetic and Logic Unit,ALU)和控制单元(Control Unit,CU)两大部件。此外,它还包括若干个寄存器和存储器及彼此之间的数据、控制与状态总线。它与内部存储器和输入/输出设备合称为电子计算机的三大核心部件。其功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的性能在很大程度上由CPU的性能所决定,而CPU的性能主要体现在运行程序的速度上。
1.1.2 位和字节
1.位
位(bit)又称为比特,bit是Binary System的缩写。在现实应用中,位有如下两个含义。
(1)它是计算机专业术语,是信息量单位。二进制数的一位所包含的信息就是一位,如二进制数0100就有4位。在计算机应用中,二进制数“0”和“1”是构成信息的最小单位,称作“位”或“比特”。
(2)二进制数字中的位是信息量的度量单位,为信息量的最小单位。数字化音响用电脉冲表达音频信号,“1”代表有脉冲,“0”代表脉冲间隔。如果波形中每个点的信息用4位一组的编码来表示,则每组编码有4位。位数越多,表达的模拟信号就越精确,对音频信号的还原能力越强。
2.字节
字节(Byte),是计算机信息技术中用于存储容量的一种计量单位,有时在一些计算机编程语言中也表示数据类型和语言字符。
在计算机应用中,由若干位组成1字节。字节由多少位组成取决于计算机的结构。通常来说,微型计算机的CPU多由8位组成1字节,并用此表示一个字符的代码。构成1字节的8位被看作一个整体,字节是存储信息的基本单位。在大多数情况下,计算机存储单位的换算关系如下:
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
在上述关系中各个单位的具体说明如下:
B:表示字节。
bit:表示位。
KB:表示千字节。
MB:表示兆字节。
GB:表示吉字节。
1.1.3 二进制
二进制是计算机技术中广泛采用的一种数制,是使用0和1两个数码来表示的数。二进制的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,这是由18世纪德国数理哲学大师莱布尼兹发现的。当前的计算机系统使用的基本上都是二进制系统,数据在计算机中主要是以补码的形式进行存储的。计算机中的二进制是一个非常微小的开关,用“开”来表示1,用“关”来表示0。因为它只使用0、1两个数字符号,所以非常简单方便,易于用电子方式来实现。
下面介绍如何将十进制数转换成二进制数。
(1)把正整数转换成二进制。
转换原则是除以2取余,然后倒序排列,高位补零。也就是说,将正的十进制数除以2,得到的商再除以2,依次类推,一直到商为0或1,然后在旁边标出各步的余数,最后倒着写出来,高位补零即可。例如,将十进制数字42转换为二进制的步骤为:42除以2得到的余数连在一起为010101,然后将得到的余数倒着排一下就会得到数字42,所对应的二进制数是101010。但是因为在计算机内部表示数的字节单位是定长的(如8位、16位或32位),所以当位数不够时,需要在高位补零。十进制数42转换成二进制数的结果是101010,它的前面缺少两位,因此将十进制数42转换成二进制数的最终结果是:00101010。
(2)把负整数转换成二进制。
转换原则是先将对应的正整数转换成二进制,最后对二进制数取反,最后将结果加1。以十进制负整数−42为例,将42的二进制形式(00101010)取反得到的结果是11010101,然后再加1的结果是11010110。所以负整数−42转成二进制数的最终结果是:11010110。
(3)把二进制整数转换成十进制。
转换原则是先将二进制数补齐位数。如果首位是0则代表它是正整数;如果首位是1则代表它是负整数。先看首位是0的正整数,补齐位数以后,得到n×2m的计算结果。其中,上标m表示二进制数字的位数,n表示二进制的某个位数。对于二进制数中的各位分别计算n×2m,然后将计算结果相加得到值的就为十进制数。比如将二进制数1010转换为十进制数的过程如下。
二进制 1 0 1 0
补齐位数 0 0 0 0 1 0 1 0
计算n×2m0×27 0×26 0×25 0×24 1×23 0×22 1×21 0×20
计算结果 0 0 0 0 8 0 2 0
各位求和结果 10
所以将二进制数1010转换为十进制数的结果是10。
如果要转换的二进制数补足位数后首位为1,那么表示这个二进制数是负整数。此时,就需要先取反,然后再进行换算:例如二进制数11101011的首位为1,这时应先取反得到00010100,然后按照上面的计算过程得出10100对应的十进制数20,所以二进制数11101011对应的十进制数为−20。
1.1.4 编码格式
1.ASCII码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),是基于拉丁字母的一套计算机编码系统,主要用于表示现代英语和其他西欧语言。ASCII码是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
一个英文字母(不分大小写)占1字节空间,一个中文汉字占2字节空间。一个二进制数字序列在计算机中为一个数字单元,一般为8位二进制数。它的最小值为0,最大值为255。例如,一个ASCII码就是1字节。
2.Unicode编码
Unicode(又称为统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode编码是为了解决传统字符编码方案的局限性而产生的,它为每种语言中的每个字符都设定了统一并且唯一的二进制编码,以满足跨语言和跨平台进行文本转换、处理的要求。
最初Unicode编码的长度是固定的16位,也就是2字节代表一个字符,这样可以表示65536个字符。显然,若要表示各种语言中的所有字符,这是远远不够的。Unicode 4.0规范考虑到了这种情况,定义了一组附加字符编码。附加字符编码采用两个16位来表示,这样最多可以定义1 048 576个附加字符。目前,Unicode 4.0规范只定义了45 960个附加字符。
Unicode只是一个编码规范。目前实际实现的Unicode编码只要有3种:UTF-8、UCS-2和UTF-16。3种Unicode字符集之间可以按照相关规范进行转换。
3.UTF-8编码
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度的字符编码,又称为万国码。UTF-8由Ken Thompson于1992年创建,现在已经将它标准化为RFC 3629。UTF-8用1~6字节编码Unicode字符。在网页上它可以统一页面显示中文简体/繁体及其他语言(如英文、日文、韩文)。一个UTF-8编码的英文字符占用1字节;一个UTF-8编码的中文(含繁体)字符少数情况下占用3字节,多数情况下占用4字节;一个UTF-8编码的数字占用1字节。
边看书边听视频,迅速掌握C编程技术的指南
内容提要
本书循序渐进、由浅入深地讲解了C语言开发的技术。全书共25章。本书不仅介绍了C语言的基础和核心知识(如开发工具、语法、运算符、表达式、输入/输出、流程控制、数组、字符串、函数),还讲解了C语言中的重点和难点(如指针、结构体、共用体和枚举、链表、位运算、预编译、文件操作、调试、内存管理、高级编程技术、算法、数据结构、网络编程技术等)。此外,本书还通过4个综合实例,介绍了C语言在综合项目中的应用。全书内容以“技术解惑”和“范例演练”贯穿全书,引领读者全面掌握C语言。
本书不但适用C语言的初学者,也适合有一定C语言基础的读者学习。