C语言算数运算符

运算符 名称
+ 加法运算符
- 减法运算符
* 乘法运算符
/ 除法运算符
% 求余运算符
++ 自增运算符
自减运算符

aa的不同:

1
a++是先参与运算再自增,++a反之。

C语言关系运算符

运算符 名称 备注
> 大于
< 小于
>= 大于等于 常见错误:=>
<= 小于等于 常见错误:=<
== 等于
!= 不等于

特别说明:

1
2
=   表示的是赋值
== 判断功能

关系运算符的使用

在关系运算中,0为假,其他数字都为真。

一般情况下配合if语句使用

1
2
3
4
if(关系运算符的表达式)
{
//语句1
}

如果关系运算符为真 则执行语句1

关系运算符的表达式成立 -> 运算结果为真 -> 返回1 -> 执行语句1
关系运算符的表达式不成立 -> 运算结果为假 -> 返回0 -> 不执行语句1

有时也在while语句中使用

1
2
3
4
while(关系运算符表达式)
{
//语句1;
}

如果关系运算符为真 则执行语句1

关系运算符表达式成立 -> 运算结果为真 -> 返回1 -> 执行语句1
关系运算符表达式不成立 -> 运算结果为假 -> 返回0 -> 不执行语句1

C语言位运算符

C语言中六种位运算符

‘&’ 按位与(0对输出有影响,直接置0)

运算规则:

1
2
3
4
a&b = 1 & 1 = 1;
a&b = 0 & 1 = 0;
a&b = 1 & 0 = 0;
a&b = 0 & 0 = 0;

例:

1
2
3
4
5
6
7
a & b = 0000 0110 & 0000 0101 = 
0 1 1 0
0 1 0 1
————————
0 1 0 0 = 4

即 a & b = 4;

‘|’ 按位或(1对输出有影响,直接置1)

运算规则:

1
2
3
4
a | b = 1 | 1 = 1;
a | b = 0 | 1 = 1;
a | b = 1 | 0 = 1;
a | b = 0 | 0 = 0;

例:

1
2
3
4
5
6
7
a | b = 0000 0110 | 0000 0101
0000 0110
0000 0101
——————————
0000 0 111 = 7

即 a | b = 7;

‘^’ 按位异或(相当于不带进位的二进制加法)

运算规则:

1
2
3
4
5
(a、b不同时为1,相同时为0
a ^ b = 1 ^ 1 = 0;
a ^ b = 0 ^ 1 = 1;
a ^ b = 1 ^ 0 = 1;
a ^ b = 0 ^ 0 = 0;

例:

1
2
3
4
5
6
7
a ^b = 0000 0110 | 0000 0101
0000 0110
0000 0101
——————————
0000 0011 = 3

即 a ^b = 3;

‘~’ 取反

规则:

1
2
a = 0   ~a = 1;
a = 1 ~a = 0;

例:

1
2
3
a = 6 = b0000 0110
~a = 1111 1001 = 249
249 =255 = FF = 1111 1111

‘<<’ 左移

1
2
3
4
unsigned char a;
a = 6;
unsigned char b;
b = a << 1; //b为a二进制数左移一位,相当于乘以2

b = a << 1 = 0x0c = 12;

‘>>’ 右移

1
2
3
4
unsigned char a;
a= 6;
unsigned char b;
b = a>>1;

a = 0000 0110 = 6;
由于 0000 0011 = 3;
则 b = a>>1 = 3;

对于b = a>> 2
有0000 0001 = 1;

Ps:无论是左移还是右移,溢出的一位舍去,是否溢出要看变量的类型,因为变量的类型决定着变量有多少位。

位运算符的运用

以下代码块利用上面的位运算符达到控制任务顺序的目的

1
2
3
4
5
6
7
8
9
10
11
12
13
dat = 0xAA; //b1010 1010;
for (j = 0; j < 8; j++)
{
if (dat & 0x80) //(dat)1010 1010 & b1000 0000(0x80)
{
//第1,3,5,7个循环触发,if内结果为1
}
else
{
//第2,4,6,8个循环触发,if内结果为0
}
dat <<= 1; //dat左移一位
}

1010 1010 << 1
得到0101,0100

C语言逻辑运算符

‘&&’ 与运算

常见应用场景:

1
2
3
4
if(表达式1 && 表达式2  && 表达式3 ...)
{
语句1;
}

只有当表达式1、表达式2、表达式3都为真的时候(都成立时),执行语句1;否则不执行语句1。

‘||’ 或运算

常见应用场景:

1
2
3
4
if(表达式1 || 表达式2 || 表达式3 ...)
{
// 语句1;
}

当表达式1,表达式2和表达式3至少有1个为真时,执行语句1。

‘!’ 非运算

例:

1
2
3
bool a;
a = 0; // !a 为 1
a = 1; // !a 为 0

常见应用场景:

1
2
3
4
if (!变量a)
{
// 表达式1;
}
  1. 当变量a为0时,!a 为真 执行表达式1
  2. 当变量a非0时,!a 为假 不执行表达式1;

C语言赋值运算符

1
2
3
4
5
6
7
a += b;     // 等价于   a = a+b;
a -= b; // 等价于 a = a-b;
a *= b; // 等价于 a = a*b;
a /= b; // 等价于 a = a/b;
a %= b; // 等价于 a = a%b;
a <<= 1; // 等价于 a = a<<1;
...

赋值运算符及赋值表达式,C语言赋值运算符及其赋值表达式详解