今天是学习嵌入式的第三天,继续学习c语言部分的知识,今天主要继续学习了数据类型中的字符型数据,另外还学习了c语言中运算符和表达式的一些相关知识。
一、字符型数据
1.字符常量
字符常量一般为以单引号引起来的各种字符,另外还有一些特殊的字符常量,就是以‘\’开头的各种转义字符,具体如下表:
2.字符变量
字符变量即为char (变量名)这种形式定义的变量,其也分为unsigned和signed两种形式,它在内存中占一个字节,即以八位二进制形式的数值存储在内存当中。目前的各种字符都有其对应的编码方式,就以典型的ASCII码为代表,其前32位定义了各种的控制字符,48-57为‘0’-‘9’的数字字符,65-90为‘A’-‘Z’的大写字母字符,97-122为‘a’-‘z’的小写字符。
知道了字符在内存中的存储方式之后,就可以将其视为整数进行一定的计算,从而达到一些特定的操作,如:字母的大小写转换,只需要相应的加减32即可。
二、运算符
1.隐式类型转换和强制类型转换
学习了基本的数据类型之后,我们就可以对他们进行运算,在运算时我们难免会遇到各种数据类型的混合运算,这时各种运算符和运算数就构成了表达式,这时我们要知道所有的表达式都是有结果的,那么所有的表达式就有他的数据类型。那么如何去确定表达式的数据类型呢,这时就要知道c语言中规规定了不同的的数据类型之间进行运算时,要把他们统一为相同的数据类型进行计算,此时就有下图规则进行数据类型的转化:
从右到左为强转,即只要涉及到char,short类型数据的运算,都要首先将其转换为 int型数据。从下到上看主要是精度的变化,当设计到不同类型的数据进行运算时,将低精度的转换为高精度的形式再进行计算。这套规则被称为隐式类型转换。
而显式类型转换主要指我们想要强制的将某个数据类型转换为另一种数据类型时,在其前面加上(数据类型)这样我们就能将其转换为我们想要的数据类型。
一个表达式我们要知道他的值,我们要首先知道怎么去看,这时我们就要依靠运算符的优先级和结合性去看,即高优先级的运算符先结合运算值。然后就可以将一个复杂的表达式进行简化。
2.运算符
运算符分为算数运算符,赋值运算符,逗号运算符
算数运算符即为:+,-,*,/,%(取余)
赋值运算符即“=”
逗号运算符即‘,’,其又称为顺序运算符,顾名思义,当多个表达式由,连接时,顺序执行即可。
算数运算符主要要注意/和%,/的时候除数不能为0,。取余运算有一般有两个用途:一是,判断奇偶数,而是限制一定的范围,原理就是一个数对另一个数取余,其结果一定不大于另一个数。
还有++,- -,即自加自减运算符,我们要注意单独的i++,或者++i他们都是对i进行加一,没有什么区别,但当他们和别的数在一起运算时就有了区别,i++表示先用后加,在内存中执行时是需要先提前开一块区域将i的值放进去,然后再对i加一更改i原来的值,而++i则表示先加后用,他在内存中执行的过程就是直接将i加一更改i原来的值。这样两种操作的执行效率就不同,显然后者效率更高,不用在内存中另开区域。
其次我们要注意lvalue(左值)和rvalue(右值)的概念,其在c语言中的区分方法为对其进行&(取地址)操作,如果能够取得地址,则称为左值,反之为右值,在我们写代码时要注意,最典型的左值就是各种变量名。
最后就是关于计算机在读一个表达式时的方式--贪心原则,从左到右逐个字符的扫描表达式,看这些字符能否,尽可能多的结合成c的运算符不能结合,就还是字符本身。了解了这个原则有助于我们去读一些复杂的表达式。