发布于2022年10月15日2年前 前言: 当我们学习完了标识符,常量和变量以后,这一章再学习完运算符及表达式,就基本把C语言中的“单词”这块完成了。 运算符分类: 算术运算符(+、-、*、/、%、++、--) 赋值运算符(=、复合赋值运算符) 关系运算符(>、<、==、>=、<=、!=) 逻辑运算符(!、&&、||) 条件运算符(? :) 逗号运算符(,) 移位运算符(<<、>>) 位运算符(~、|、^、&) 指针运算符(*,&) 求字节运算符(sizeof) 强制类型转换运算符((类型)) 分量运算符(.、->) 下标运算符(【】) 其他 1,按照运算符在表达式中与链接运算对象的个数可分为: (1)单目运算符 (2)双目运算符 (3)三目运算符 (4)其他 2,运算符的优先级: 优先级指一个表达式中不同运算符进行操作的先后顺序。通常所以单目运算符的优先级高于双目运算符 3,运算符的结合性: 结合性是指表达式中各种运算符优先级相同时,由运算符的结合性来确定表达式的运算顺序。 第一类:右结合性(运算符的结合性从右向左)单目,三目和赋值运算符 第二类:左结合性(运算符的结合性从左向右)以上都是 算术运算符 运算符号 操作数数目 名称 运算规则 举例 + 单目 正 取原值 +5 - 单目 负 取负值 -5 + 双目 加 加法 a+b - 双目 减 减法 a-b * 双目 乘 乘法 a*b / 双目 除 除法 a/b % 双目 模 求余数 5%7 ++ 单目 自增 自增1 a++ -- 单目 自减 自减1 a-- 1,基本运算符算数时注意: (1)除法运算:两个操作数都是整数时,结果为整数,小数部分省去;如果都是实数,则结果为实数 (2)取余运算:两个操作数必须为整数,其结果也为整数 2,自增、自减运算符:自增(++)和自减(--)运算是单日运算,其作用是使变量的值增1或减1,其优先致高于所有的双目运算。自增和自减运算的应用形式有两种 (1)前缀形式:运算符在变量前面,表示对变量先自动加1或自动减1,然后再参与其他运算,即先改变变量的值后使用,如++k和--k。 (2)后缀形式:运算符在变量后面,表示变量先参与其他运算,再对变量先自动加1或自动减1,即先使用后改变,如k++和k--。 赋值运算符 赋值运算符用“=”表示,它的作用是将一个数据赋给一个变量。例如:a=3的作用是把常量3赋给变量a。也可以将一个表达式赋给一个变量,例如a=x%b的作用是将表达式x%b的值赋给变量a。 赋值运算符用“=”是一个双目运算符,其结合性是从右向左。 符合的赋值运算符 定义:赋值运算符“=”和5种算术运算符(+、-、*、/、%)和5种位运算符(<、>、&、^、|)构成10种复合的赋值运算符。分别为:+=、-=、*=、/=、&=、<=、>=、&=、^=、|=。 例如:a+=3 等价于 a=a+3 a*=a+3 等价于 a=a*(a+3) 关系运算符 运算符 作用 > 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 != 不等于 1、关系运算符都是双目运算符,结合方向是自左向右。其中(>、<、<=、>=)优先关系相同,(==、!=)优先关系相同。 2,用关系运算符将两个任意类型的表达式连接起来的式子,称为关系表达式。它的结果是逻辑值0或1 (1)当两个运算对象之间满足给定的关系时,则表达式取真值1,否则,取假值0。 例如: int a=12,b=14; 则表达式a<b的运算结果为真值1, a==b的结果为假值0。 (2)两个运算对象可以是算术表达式。如果是字符数据时,按其ASCI码值进行比较。 例如: 'a'>‘b’的运算结果为假值0。 (3)关系表达式的值可以作为整数值参与运算。 例如 int = 10, b = 9, c=1,f; f=a>b>c; 则f=0 其中,关系运算符>的优先级高于赋值运算符=,而关系运算符是自左至右的结合方向, 所以先执行a>b,结果为1,再执行1>c,结果为0,最后将0值赋给f。 逻辑运算符 语言中的逻辑运算符是对两个关系表达式或者逻辑值进行比较的。 逻辑运算符共有三种:逻辑与&&、逻辑或||和逻辑非! 其中逻辑与和逻辑或是双目运算符,结合方向是自左至右,且逻辑与&&的优先级高于逻辑或||。逻辑非!是单目运算符,结合方向是自右自左。由于单目运算符的优先级高于双且运算符,所以它的优先级高于逻辑与和逻辑或。 a b a&&b a||b !a 真 真 真 真 假 真 假 假 真 假 假 真 假 真 真 假 假 假 假 真 条件运算符 条件运算符由“?”和“:”组成,它的一般格式为 表达式1?表达式2:表达式3 其解释为:首先计算表达式1,如果表达式1的值为真,则求解表达式2,以表达式2的值作为整个条件表达式的值;如果表达式1的值为假,则求解表达式3,以表达式3的值作为整个条件表达式的值。 它是C语言中唯一一个三目运算符,它的结合方向为自右向左。 例如:int x=1,y=2,z; z=x>y?++x:y++; 运行结果为:x=1,y=3,z=2 逗号运算符 “,”是C语言的一种特殊的运算符,称为逗号运算符。用逗号将多个表达式连接起来的式子称为逗号表达式。 逗号表达式的一般形式:表达式1,表达式2,···, 表达式n 逗号表达式的求解过程:从左至右地计算各个表达式的值,先求解表达式1,再求解表达式2 最后求解表达式n,整个逗号表达式的值为表达式n的值。 例如:求逗号表达式"a=5,a*=a,a+5"的值。 先求赋值表达式a=5的值,表达式的值为5, a的值为5;接着求复合赋值运算a*=a的值,表达式的值为25, a的值为25,最后求算术表达式a+5的值,表达式的值为30, a的值为25。因此,整个逗号表达式的值为30。 移位运算符 移位运算符分为两类:左移运算符(<<)和右移运算符(>>) 左移运算符: 将一个二进制数按指定移动的位数向右移动。 移位规则:左边抛弃,右边补0 右移运算符: 将一个二进制数按指定移动的位数向右移动。 移位规则:最高位是0,左边补齐0;最高为是1,左边补齐1。 注:内存中存放的数据是二进制的补码 原码:根据数值直接写出的二进制码 反码:原码的符号位不变,其他位取反 补码:反码+1 (正整数的原码,反码和补码相同,) 举例:int num+10; num>>1; num<<1; 位运算符 & 按位与 | 按位或 ^ 按位异或 注:对它们的二进制数进行操作,他们的操作数必须是整数。 举例:int num1 = 1; int num2 = 2; num1 & num2; num1 | num2; num1 ^ num2; 求字节运算符 sizeof是求变量(类型)所占空间的大小。很简单,直接通过举例即可理解 例:int a = -10; printf("%d\n", sizeof(a)); 其结果为4,因为int类型在空间中占4个字节
创建帐户或登录后发表意见