|
|
本帖最后由 卓然尘世间 于 2026-3-19 11:35 编辑
C语言,在编程领域是久负盛名的,可能没接触过计算机编程的人会把它看的很神秘,感觉非常的难。但其实并非如此,C语言的逻辑和运算,充其量也就是小学水平,所以不要怕它,作者尽可能的从小学数学逻辑方式带着大家学习C语言。
4.1 二进制、十进制和十六进制
1、十进制,逢十进位,一个位有十个值:0~9,生活中到处都是它的身影。二进制就是逢二进位,它的一个位只有两个值:0和1,但它却是实现计算机系统的最基本的理论基础,计算机(包括单片机)芯片是基于成万上亿个的开关管组合而成的,它们每一个都只能有开和关两种状态,再难找出第三个状态了(不要辩解半开半关这个状态,它是不稳定态,是极力避免的),所以它们只能对应于二进制的1和0两个值,而没有2、3、4……,理解二进制对于理解计算机的本质很有帮助。书写二进制数据时需加前缀0b,每一位的值只能是0或1。十六进制就是把4个二进制位组合为一位来表示,于是它的每一位有0b0000~0b1111共16个值,用0~9再加上A~F(或a~f)表示,那么它自然就是逢十六进位了,它本质上同二进制是一样的,是二进制的一种缩写形式,也是程序编写中常用的形式。书写十六进制数据时需加前缀0x,下表是三种进制之间的对应关系。
表4-1 进制转换
2、对于二进制而言,8位二进制称之为一个字节,二进制的表达范围值是从0b00000000~0b11111111,而在程序中用十六进制表示的时候就是从0x00到0xFF,二进制转换十进制和十六进制的方法,二进制4位一组,遵循8/4/2/1的规律比如0b1010,那么从最高位开始算,数字大小是8*1+4*0+2*1+1*0 = 10,那么十进制就是10,十六进制就是0xA。尤其二进制转十六进制的时候,十六进制一位刚好是和二进制的4位相对应的,这些大家不需要强行记忆,多用几次自然就熟练了。
3、对于进制来说,只是数据的表现形式,而数据的大小不会因为进制表现形式不同而不同,比如二进制的0b1、十进制的1、十六进制的0x01,本质上是数值大小相等的同一个数据。在进行C语言编程的时候,只写十进制和十六进制,那么不带0x的就是十进制,带了0x符号的就是十六进制。
4.2 C语言变量类型和范围
什么是变量?变量自然和常量是相对的。常量就是1、2、3、4.5、10.6……等固定的数字,而变量则根小学学的x是类似概念,可以是1,也可以是2,想让它是几是程序说了算。
那么小学学的数学里边,有这么几类,正数、负数、整数和小数。在C语言里,除名字和数学里学的不一样外,还对数据大小进行了限制。这个地方有一点复杂的是,在C51里边的数据范围和其他编程环境还可能不完全一样,因此下边的这个图,仅仅代表的是C51,其他编程环境可能不一样,大家知道有这回事就可以了。
C语言的数据基本类型分为字符型、整型、长整型以及浮点型,如图4-1所示。
图4-1 C语言基本数据类型 图4-1中,四种基本类型,每个基本类型又包含了两个类型。其中字符型、整型、长整型,除了可表达的数值大小范围不同之外,都是只能表达整数,而unsigned型的又只能表达正整数,要表达负整数则必须用signed型,如要表达小数的话,则必须用浮点型了。
比如前面讲到的闪烁LED小灯的程序,用的是
unsigned int i = 0;
这个i的取值范围就是0~65535,在接下来的for语句里,如果把原来那个30000改成70000的话,
for(i=0;i<70000;i++);
会发现小灯会一直亮,而不是闪烁了,这里自然就有因超出i取值范围所造成的问题。但要彻底搞明白这个问题,还要来了解for语句的用法。不用急,接下来很快就会学到它了。
这里有一个编程宗旨,就是能用小不用大。就是说定义能用1个字节char解决问题的,就不定义成int,一方面节省RAM空间可以让其他变量或者中间运算过程使用,另外一方面,占空间小程序运算速度也快一些。
4.3 C语言基本运算符
小学数学学过加、减、乘、除等运算符号以及四则混合运算,而这些运算符号在C语言中也有,但是有些表达方法不一样,并且还有额外的运算符号。在C语言编程中,加、减、乘、除和取余数的符号分别是:+、-、*、/、%。
C语言有一个很重要的赋值运算符“=”,前边程序有使用过。在C语言里,“=”代表的意思是赋值,而不是等于。最经典的一个例子就是a=1;b=2;如果写成a = a+b;这个在数学里的运算是a等于a加b,是个错误结论;而在c语言里的意思是把a加b的结果送给a,那么运算完了之后的结果是a等于3,b还等于2。
说到这里就不得不说C语言的比较运算符“==”。这个在C语言里是进行是否等于判断的关系运算符,而“!=”就是不等于的关系运算符。
此外,C语言中还有额外的两个运算符++和--,一个是自加1,一个是自减1,下面选++来讲一下。
++在用法上就是加1的意思,注意是变量自己加,比如b++的意思就是b=b+1,而在编程的时候有两种常用的方式先加和后加。比如
unsigned char a = 0; unsigned char b = 0;
那么
a = ++b;
其整个运算过程是先计算b=b+1,那么b就等于1了,然后再运行a=b,运行完毕后a=1,b=1。如果写成
a=b++;
那么运算过程就是先执行a=b;然后再执行b=b+1,执行完的结果就是a=0,b=1。
这些运算符这里就是简单介绍一下,而后边会通过使用实例来巩固这些知识。其他一些运算符,在使用过程中也会陆陆续续介绍到。
|
|