首先,引入表达式的概念:由操作数和运算符组合成的式子
分为左值和右值
(1)左值:就是可以写
的内存块,也就是变量
(2)右值:可以读
的内存块,也就是变量,常量,字面值
(1)+
(2)-
(3)*
(4)/
如:10/3=3
5.0/2=2.5
说明:
如果两个操作数都为整数
,执行整数除法(舍弃小数部分),只要有浮点数
,就执行浮点数除法,而且会向下取整
(也就是小数点之后的舍弃)
注意:/的右操作数不能为0
例:
int a=1;
int b=0;
printf("%d\n",a/b);
结果会报错:
Exception in thread "main" java.lang.ArithmeticException: / by zero
//算术异常
(5)%–>取余
如:10%3=1
注意:%要求两个操作数都为整数,并且右操作数不能为0
,并且运算结果的符号由左操作数决定
例:
printf("%d\n",10%3);//1
printf("%d\n",-10%3);//-1
printf("%d\n",-10%-3);//1
printf("%d\n",-10%-3);//-1
(6)++ -->自增运算符
(7)-- -->自减运算符
注意:自增和自减运算符只能用于变量
,不可以用于常量或表达式
分为前置和后置:
(1)前置:先++或–,再使用
(2)后置:先使用,再++或–
例:
int i=0;
printf("%d\n",++i);//1
printf("%d\n",i);//1
i=0;
printf("%d\n",i++);//0
printf("%d\n",i);//1
二.赋值运算符=:结合性从右到左
例:
int a,b;
a=b=10;
printf("%d\n",a);//10
printf("%d\n",b);//10
复合赋值运算符
+=
-=
*=
/=
%=
<<=
>>=
&=
/=
^=
例:
a+=3;//相当于a=a+3;
三.关系运算符>>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
= 用于赋值
注意:要注意 == 和 = 的区别
四.逻辑运算符&&(逻辑与,二元运算符)
真 && 真 ->真 真 && 假 ->假
假 && 真 ->假 假 && 假 ->假
||(逻辑或,二元运算符)
真 || 真 ->真 真 || 假 ->真
假 || 真 ->真 假 || 假 ->假
!(逻辑非,一元运算符)
注意:
逻辑与的短路问题:当左操作数为假时,即可判断表达式结果为假,右操作数不执行。
逻辑或的短路问题:当左操作数为真时,即可判断表达式结果为真,右操作数不执行。
例:
int a = 1, b = 1;
printf("%d\n", ++a || ++b);
printf(“a=%d b=%d\n”, a, b); // a=2 b=1
int a = -1, b = -1;
printf("%d\n", ++a && ++b);
printf(“a=%d b=%d\n”, a, b); // a=0 b=-1
例:
x=y=1;
t=++x||++y;
//结果是t=1,x=2,y=1
五.位运算符(均在二进制位上操作)首先,我们要知道,数据存储的最小的单位是字节,而对数据进行操作的最小的单位是比特,每个字节由8个比特位构成。
我们自己设定:A= 00000101,B= 00001011
&(按位与):同1为1,其它为0
则A&B=00000001
例:
|(按位或):有1即为1
则A|B=00001111
例:
~(按位取反):0变1,1变0
则~A=11111010
^(按位异或):相同为0,不同为1
则A^B=00001110
例:
0^0=0;
1^0=1;
1^1=0;
注意:一个数a位异或另外一个数b两次,结果还是这个数a本身。(也就是说如果两个数相同,异或的结果是0
)这个特点可以用来交换两个元素的值
<<(按位左移):左操作数向左移动右操作数指定的位数,低位补0
(也就是最左侧不要了,右侧补0)
则A<<2=00010100
注意:左移运算符左移一位相当于乘以2
,而且左移丢弃的是符号位,所以正数左移可能会变为负数
>>(按位右移):左操作数向右移动右操作数指定的位数,高位补符号位(正数补0,负数补1)
>则A>>2=00000001
注意:右移运算符右移一位相当于除以2
>>>:无符号右移:最右侧不要了,最左侧补0
六.条件运算符语法是 :exp1?exp2:exp3;
这个表达式的意思是如果exp1为真,整个表达式的结果就是exp2,如果exp1为假,整个表达式的结果就是exp3
例:
//求较大值
int a=10;
int b=20;
printf("%d\n",(a>b?a:b));
注意:表达式2和表达式3的结果必须是同类型
的,除非可以发生隐式类型转换
例:
int a=10;
int b=20;
int c=a>b?1:2.0;
表达式不能单独存在,结果必须要被使用
例:
int a = 10;
int b = 20;
a >b? a : b; // 会报错: 不是语句
七.逗号运算符exp1,exp2,exp3,…expN;
逗号表达式会从左到右依次执行,整个表达式的结果为最后一个表达式的结果
八.sizeof注意:sizeof是一个运算符
,而不是函数
注意:同一级的运算符,优先次序由结合方向决定,
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧