当我们学习完了标识符,常量和变量以后,这一章再学习完运算符及表达式,就基本把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个字节