|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式系统程序设计 > 嵌入式程序设计语言 > 嵌入式C/C++程序设计要求 > C程序设计基础 > C程序基础 >
|
被考次数:7次
被考频率:中频率
总体答错率:50%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
相关知识点:22个
|
|
|
|
C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符及其他运算符。根据运算符需要的操作数个数,可分为单目运算符(一个操作数)、双目运算符(两个操作数)和三目运算符(三个操作数)。
|
|
|
表达式总是由运算符和操作数组成,它规定了数据对象的运算过程。
|
|
|
|
运算符的作用是将数值变量的值增加1或减少1。自增或自减运算符只能作用于变量而不能作用于常量或表达式。
|
|
|
++value称为前缀方式,value++称为后缀方式,其区别是:前缀方式先将变量的值增1,然后取变量的新值参与表达式的运算;后缀方式是先取变量的值参与表达式的运算,然后再将变量的值增加1。自减运算同理。
|
|
|
|
关系运算符用于数值之间的比较,包含等于(==)、不等于(!=)、小于(<)、小于或等于(<=)、大于(>)、大于或等于(>=)这6种,结果的值为1(表示关系成立)或为0(表示关系不成立)。
|
|
|
不能用关系运算符对字符串进行比较,因为被比较的不是字符串的内容本身,而是字符串的地址。例如,“HELLO”<“BYE”是用“HELLO”的地址与“BYE”的地址来比较大小,这没有意义。
|
|
|
|
逻辑与(&&)、逻辑或(||)、逻辑非(!)的运算结果为1(表示true)或为0(表示false)。“逻辑非”是单目运算符,它将操作数的逻辑值取反。“逻辑与”是双目运算符号,其含义是“当且仅当两个操作数的值都为true时,逻辑与运算的结果为true”。“逻辑或”的含义是“当且仅当两个操作数的值都为false时,逻辑或运算的结果为false”。
|
|
|
例如,逻辑表达式!20的结果是0,10&&5的结果是1,10||5.5的结果是1,10&&0的结果是0。
|
|
|
在C程序中,由逻辑运算符“&&”“||”构造的表达式采用短路计算方式求值,即对于“a&&b”,a为1(假)时不需要再计算b的值就可以确定该表达式的结果为0(假),对于“a||b”,a为1(真)时不需要再计算b的值就可以确定该表达式的结果为1(真)。
|
|
|
例如,对于逻辑表达式((year%4==0)&&(year%100!=0)||(year%400==0)),若year%4的结果不是0(例如year的值为2001),就不需要再计算year%100的值了,因为此时“&&”运算的结果已经确定为0(即条件不成立)。
|
|
|
|
赋值运算符(=)的作用是将一个表达式的值赋给一个变量,可进行组合赋值。例如:
|
|
|
|
书写组合表达式时,可能存在的潜在错误是书写错误,例如将“+=”写成了“=+”,这类错误在编译阶段无法识别,只能在程序的运行结果不符合预期时再进行排查。
|
|
|
C程序中,常出现将比较相等的运算符号“==”误用为“=”(赋值运算符)的情况,编程时需要特别注意。
|
|
|
|
(1)条件运算符是C中唯一的三目运算符,也称为三元运算符,它有三个操作数:
|
|
|
|
(2)多个表达式可以用逗号组合成一个表达式,即逗号表达式。逗号运算符带两个操作数,结果是右操作数。逗号表达式的一般形式是:表达式1,表达式2,……,表达式n,它的值是表达式n的值。逗号运算符的用途仅在于解决只能出现一个表达式的地方却要出现多个表达式的问题。
|
|
|
|
位运算符要求操作数是整型数,并按二进制位的顺序来处理它们。C/C++提供6种位运算符,如下表所示,为简化起见,设整数字长(word)为16位。
|
|
|
|
|
赋值运算符也可与位运算符组合,产生&=、|=、^=、<<=、>>=等组合运算符。
|
|
|
例如,用宏定义通过位运算得到一个字的高位和低位字节。
|
|
|
|
|
sizeof用于计算表达式或数据类型的字节数,其运算结果与系统相关。例如,对于下面的数组定义,可用“sizeof(a)/sizeof(int)”计算出数组a的元素个数为7。
|
|
|
|
|
在混合数据类型的运算过程中,系统自动进行类型转换。例如,一个int型操作数和一个long型操作数进行运算时,将int类型数据转换为long类型后再运算,结果为long型;一个float型操作数和一个double型操作数的运算结果是double型。这称为类型提升。
|
|
|
在程序中也可以进行数据类型的强制转换(显式类型转换),一般形式为:
|
|
|
|
需要注意,(int)(x+y)是将(x+y)转换为int型,而(int)x+y是将x转换为int型后再与y相加。对变量进行显式类型转换只是得到一个所需类型的中间变量,原来变量的类型并不发生变化。
|
|
|
当不得已混合使用类型时,一个比较好的习惯是使用强制类型转换。强制类型转换可以避免编译器隐式转换带来的错误,同时也给维护人员传递一些有用信息。
|
|
|