1.运算符:
1、算术运算符: / % + - *
注意: 取余操作%只能应用于整数**
a = 20 ; 把值20 赋给左边的空间
2、逻辑运算符: && 、 || 、 !
1、逻辑与 &&
格式: 表达式1 && 表达式2 说明: 表达式1 成立 并且 表达式2 也成立 ,那么 该 逻辑与表达式 成立
例子:
a = 10; b = 20; a && b 成立
该逻辑与还有一个智能算法: 表达式1 && 表达式2 && 表达式3 && 表达式4 && 表达式5 && 表达式6 从左往右,一旦能够确定该 逻辑表达式 的值,则停止往后计算 ,一旦碰到 假 ,则不在往后执行
例子:
a = 10; b = 20; a && b && a+b && 0 && a++ && b-- && a-- 碰到0 且后面都是 逻辑& 可以立刻判定整个式子为假
2、逻辑与 ||
格式: 表达式1 || 表达式2 说明: 表达式1 成立 或者 表达式2 成立 ,那么 该 逻辑或表达式 成立
智能算法: 表达式1 || 表达式2 || 表达式3 || 表达式4 || 表达式5 || 表达式6 从左往右,一旦能够确定该 逻辑表达式 的值,则停止往后计算 一旦 碰到 真 ,则不在往后执行
3、逻辑非: !
格式: !(表达式1) 说明: 表达式1 为真 则 !(表达式1) 为假 表达式1 为假 则 !(表达式1) 为真
练习: 注意这个例题
int a = 10; 1 int b = 20; 20 a && b && a++ && b++ && 0 && a++ && b-- || a++ && b-- || a+b && a-- && b-- || a+b
3、单目运算法 :++ -- 对单一的变量进行操作
概念:对 单个目标(某一块的空间) 的操作
++ :
int a = 10; a++; // ++在后,先将a的值赋值给 a++ ,然后 a再自加1 // a = a+1; ++a; // ++在前,先a自加1 ,在将a的值赋值给 ++a;
--:
int a = 10; a--; // --在后,先将a的值赋值给 a-- ,然后 a再自减1 // a = a-1; --a; // --在前,先a自减1 ,在将a的值赋值给 --a;
4、关系运算符:> < >= <= == !=
关系运算符:
< >= <= == !=
格式 : 变量 > 变量 ---- 得到 真 或者 假 1 :
5、移位运算:<< >> 操作的是补码
移位操作符的两个操作数必须是整形
1、左移操作符:
左移操作都是一样的,所有的位数一起移动,都是舍弃溢出位,然后缺失位补0,不用考虑符号位
格式:
表达式 << n
例子: int a = 10; a << 3; // 将a的值取出来放入到cpu寄存器中,然后在cpu寄存器中做 左移操作 ,空出来的位置自动补0
2、右移操作符:
a >> 3;
1、算术右移 (有符号数): 所有的位数一起移动,空出来的位全 补 符号位 相当于 a /(2 ^3)
2、逻辑右移(无符号数) : 所有的位数一起移动空出来的位 补 零 (无符号数)
案例:
-4 >> 2 (结果为 -4 / (2^2) = -1) -4 源码 1000 0100 反码 1111 1011 补码 1111 1100 >> 2 补码 1111 1111 (高位补上符号位 1) 反码 1111 1110 源码 1000 0001 ===》 -1
6、位运算:& 、 | 、 ^ 、 ~ 、 利用补码来计算
1、位与 : &
表达式1 & 表达式2 ====》 相同位上的数据,都是1,结果才是1 例子 :
short a = 800; short b = 60; 00000011 00100000 a 00000000 00111100 b 00000000 00100000 a&b 结果为32 正数三码合一
2、位或 : |
表达式1 | 表达式2 ====》 相同位上的数据,如果有1 ,结果就是1
short a = 800; short b = 60; 00000011 00100000 a 00000000 00111100 b 00000011 00111100 a | b 结果 828
3、异或 : ^
表达式1 ^ 表达式2 ====》 相同位上的数据,数据不相同,结果就为1
short a = 800; short b = 60; 00000011 00100000 a 00000000 00111100 b 00000011 00011100 a ^ b 结果 796
4、取反: ~
~ 表达式 =-======》 0 变 1 1 变 0
short a = 800; 00000011 00100000 ~a 补码:11111100 11011111 反码: 11111100 11011110 源码: 10000011 00100001 结果: -801
7、三目运算: ?:
格式:
表达式1 ? 表达式2 : 表达式3
说明 :
表达式1成立,则选择 表达式2 表达式1不成立,则选择 表达式3
例子:
int a,b; scanf("%d%d",&a,&b); int max = a > b ? a : b;
8、逗号运算符:,
逗号运算符使用时,要在使用语句首尾添加括号
格式 : 表达式1,表达式2,表达式3,表达式4 解释: 从左往右 依次 执行每一个 表达式 ,然后将 最后一个 表达式的值 作为整个 逗号表达式的值
注意是,从左往右一直到最后一个表达式都要执行
例子:
int a = 10; int b = 20; int c = 30; int d = (a++,b++,c++,a+b,a++,b++,c++); 结果:a: 12,b: 22,c: 32,d: 31
9、运算符的优先级:
括单术 移关位 逻三赋逗
括 : 括号: () [] -> . (结构体的.)
单 : 单目: ++ -- ~ ! sizeof() (强转) &(取地址) *
术 : 算术: + - * / %
移 : 移位: << >>
关 : 关系: > >= < <= == !=
位 :位运算: &(位与) | (位或) ^(异或)
逻 : 逻辑: && ||
三 : 三目: ?:
赋 : 赋值: = += -= .....
逗 : 逗号: ,
例子:
int a=10,b=20,c=30; a *= b+c; ( * = 是赋值运算符, 所以 先计算 b + c)
10.结合方向(记忆思路):
单目运算符、三目运算符、赋值运算符 结合方向是从右至左, 其他的都是从左至右。