c语言运算符
算数运算符
±*/
大数据类型与小数据类型操作结果隐式类型提升
减-
乘*
除/
取余%
奇数偶数判断 :
num % 2 == 0 偶数
num % 2 == 1 奇数
num & 0x1 == 0 偶数
num & 0x1 == 1 奇数
自加++
var++ :后置++
++var :前置++
- 单独构成一条语句 :前置++和后置++结果相同
int num = 0;
num++;//num == 1;
------------
int num = 0;
++num;//num == 1;
- 不单独构成一条语句 :和其他运算符结合使用,和函数传参结合使用
前置++ :先取var的值,自增1,然后和其他运算符结合
后置++ :先取var的值,然后和其他运算符结合,再自增1
//后置++ :先取var的值,然后和其他运算符结合,再自增1
int num = 0;
int value = num++; //value == 0;num == 1;
//前置++ :先取var的值,自增1,然后和其他运算符结合
int num = 0;
int value = ++num; //value == 1;num == 1;
自减–
逻辑运算符
逻辑&&
有一方为假,结果为假
T && T -> T
T && F -> F
F && T -> F
F && F -> F
逻辑||
有一方为真,结果为真
T || T -> T
T || F -> T
F || T -> T
F || F -> F
条件语句中如果if语句里面 || 或的关系,如果前面的条件满足,就不会去看后面的条件了,直接总的结果为真,指向if里面的语句,如果if里面中判断语句中,第一个条件为假,才会继续判断第二个条件。
关系运算符
> < >= <= == !=
赋值运算符
赋值于=
复合赋值运算符 :
a = a + 1 <=> a += 1
+= -= *= /= %=
位运算符
BM52 数组中只出现一次的两个数字:位运算的应用
当二进制&0001结果为1的时候,为奇数,反之为偶数。它们是按照最低位的不同来分组的。
我们都知道异或运算:如果两个数一样则异或结果为0,不一样则异或结果为1
0和任何数异或都是自身
向左移动<<
// 10 << 1
0000 1010 10
-----------------
0001 0100 20
将一个运算对象的各个二进制为全部左移若干位,左边丢弃,右边空位用0位补齐
num << n :num乘2的n次方
向右移动>>
// 10 >> 1
0000 1010 10
-----------------
0000 0101 5
将一个运算对象的各个二进制为全部右移若干位,右边丢弃,左边空位用符号位补齐
num >> n :num除2的n次方
按位与&
两方为1 当前位结果1
0000 1010
& 0000 0011
-----------------
0000 0010
按位或|
当前位至少有一方为1,当前位结果1
0000 1010
| 0000 0011
-----------------
0000 1011
异或^
同一个位,两个数,不相同,该位为1
同一个位,两个数,相同,该位为0
0000 1010
^ 0000 0011
-----------------
0000 1001
当 x 是偶数,则其二进制的末尾是 0,所以 x ^ 1 将其二进制的末尾改成 1,于是得到了x+1。
当 x 是奇数,则其二进制的末尾是 1,所以 x ^ 1 将其二进制的末尾改成 0,于是得到了x -1。
取反~
每个位取反
1 -> 0
0 -> 1
~ 0000 1010 10
-----------------
1111 0101 按位取反加1
-----------------
1000 1011 -11