1、逻辑与 &&
左右两个条件都成立时,整体才成立。
2、逻辑或 ||
左右两个条件中有一个成立,整体就成立。
3、条件运算符 ?:
?前面是判断语句,当成立时输出:左边值,不成立时输出:右边值。
int c = a > b ? 2 : 3;// 当a大于b时,c被赋值2,否则被赋值3
4、按位或 |
相同位的两个数字都为0,则为0,若有一个不为0,则为1;
#define TUANYUAN 1
#define DANGYUAN 2
#define GANBU 4
#define PINGMIN 8
//单个位为1的数值,我们称为标志位
int k = GANBU | DANGYUAN;//代表即是干部也是党员
k = k | DANGYUAN | PINGMIN;//会再给他加上平民属性,已存在的党员属性不会叠加
5、按位与 &
相同位的两个数字都为1,则为1,若有一个不为1,则为0;
与运算用来判断,判断是否包含相应的属性。也可以用来清理其它位。
if(k & DANGYUAN)
printf("是党员");
else
printf("不是党员");
int k = GANBU | DANGYUAN;
int a = k & TUANYUAN;//a等于0
a = k & GANBU;//a等于4
a = k & PINGMIN;//a等于0
a = k & DANGYUAN;//a等于2
6、按位取反 ~
单目运算,将一个数字所有二进制0变1,1变0。(无符号时相当于最大值减自己,有符号相当于乘-1,正变负时绝对+1,负变正绝对值-1)
和&连用,用来删除一个标志混合变量中的某个属性。
int k = GANBU | DANGYUAN;
k = k & ~GANBU;//将干部属性删除
k = k & ~GANBU;//被开除后,不会再被开除
7、按位异或 ^
双目运算,当相同的两个数字相同时为0,不同时为1。(两次跟同一个数字^运算结果,恢复原来之前数值)
int i = 13;//源码
int j = 14;//加密
int k = i ^ j;//生成码
int x = k ^ j;//源码
8、左移 <<
移几位就相当于这个数乘以2的几次方
int i = 1 << 3;// 1乘以2的3次方,i等于8
int j = 5 << 3;// j等于40
9、右移 >>
移几位相当于这个数除以2的几次方
int i = 8 >> 2;// 8除以2的2次方,i 等于2
10、运算符优先级
一级优先级
- 圆括号 ()
- 下标运算符 []
- 指向成员运算符 ->
- 成员运算符 .
二级优先级
- 逻辑非运算符 !
- 按位取反运算符 ~
- 自增运算符 ++
- 自减运算符 –
- 负号运算符 -
- 类型转换运算符 (类型)
- 指针运算符 *
- 地址运算符 &
- 长度运算符 sizeof
三级优先级
- 乘法运算符 *
- 除法运算符 /
- 取余运算符 %
四级优先级
- 加法运算符 +
- 减法运算符 -
五级优先级
- 左移运算符 <<
- 右移运算符 >>
六级优先级
- 小于运算符 <
- 小于等于运算符 <=
- 大于运算符 >
- 大于等于运算符 >=
七级优先级
- 等于运算符 ==
- 不等于运算符 !=
八级优先级
- 按位与运算符 &
九级优先级
- 按位异或运算符 ^
十级优先级
- 按位或运算符 |
十一级优先级
- 逻辑与运算符 &&
十二级优先级
- 逻辑或运算符 ||
十三级优先级
- 条件运算符 ? :
十四级优先级
- 加等于运算符 +=
- 减等于运算符 -=
- 乘等于运算符 *=
- 除等于运算符 /=
- 取余等于运算符 %=
- 赋值运算符 =
- 大于等于运算符 >=
- 小于运算符 <
- 小于等于运算符 <=
- 按位与等于运算符 &=
- 按位异或等于运算符 ^=
- 按位或等于运算符 |=