目录
[1. 算术运算符](#1. 算术运算符)
[2. 关系运算符](#2. 关系运算符)
[3. 逻辑运算符](#3. 逻辑运算符)
[4. 位运算符](#4. 位运算符)
[5. 赋值运算符](#5. 赋值运算符)
[6. 自增和自减运算符](#6. 自增和自减运算符)
[7. 条件运算符(三元运算符)](#7. 条件运算符(三元运算符))
[8. 逗号运算符](#8. 逗号运算符)
[9. sizeof 运算符](#9. sizeof 运算符)
[10. 取地址和解引用运算符](#10. 取地址和解引用运算符)
1. 算术运算符
`+` (加法):将两个数相加。
`-` (减法):将第一个数减去第二个数。
`*` (乘法):将两个数相乘。
`/` (除法):将第一个数除以第二个数,注意在整型除法中结果也是整型(小数部分被舍弃)。
`%` (取模):返回两个数相除的余数,只能用于整数。
示例
int a = 10, b = 3;
int sum = a + b; // sum = 13
int difference = a - b; // difference = 7
int product = a * b; // product = 30
int quotient = a / b; // quotient = 3
int remainder = a % b; // remainder = 1
2. 关系运算符
`==` (等于):比较两个值是否相等。
`!=` (不等于):比较两个值是否不相等。
`>` (大于):检查第一个值是否大于第二个值。
`<` (小于):检查第一个值是否小于第二个值。
`>=` (大于等于):检查第一个值是否大于或等于第二个值。
`<=` (小于等于):检查第一个值是否小于或等于第二个值。
示例
int a = 10, b = 20;
int result;
result = (a == b); // result = 0 (false)
result = (a != b); // result = 1 (true)
result = (a > b); // result = 0 (false)
result = (a < b); // result = 1 (true)
result = (a >= b); // result = 0 (false)
result = (a <= b); // result = 1 (true)
3. 逻辑运算符
`&&` (逻辑与):如果两个操作数都为真,则条件为真。
`||` (逻辑或):如果两个操作数有一个为真,则条件为真。
`!` (逻辑非):反转操作数的逻辑状态。
示例
int a = 1, b = 0;
int result;
result = (a && b); // result = 0 (false)
result = (a || b); // result = 1 (true)
result = !a; // result = 0 (false)
4. 位运算符
`&` (按位与):对两个数的每一位执行与操作。
`|` (按位或):对两个数的每一位执行或操作。
`^` (按位异或):对两个数的每一位执行异或操作。
`~` (按位取反):对数的每一位执行取反操作。
`<<` (左移):将一个数的所有位向左移动指定的位数。
`>>` (右移):将一个数的所有位向右移动指定的位数。
示例
int a = 5, b = 3;
int result;
result = a & b; // result = 1 (0101 & 0011 = 0001)
result = a | b; // result = 7 (0101 | 0011 = 0111)
result = a ^ b; // result = 6 (0101 ^ 0011 = 0110)
result = ~a; // result = -6 (~00000101 = 11111010)
result = a << 1; // result = 10 (0101 << 1 = 1010)
result = a >> 1; // result = 2 (0101 >> 1 = 0010)
5. 赋值运算符
`=` (赋值):将右边的值赋给左边的变量。
`+=` (加且赋值):将右边的值与左边的变量相加并赋值给左边的变量。
`-=` (减且赋值):将右边的值与左边的变量相减并赋值给左边的变量。
`*=` (乘且赋值):将右边的值与左边的变量相乘并赋值给左边的变量。
`/=` (除且赋值):将右边的值与左边的变量相除并赋值给左边的变量。
`%=` (取模且赋值):将右边的值与左边的变量取模并赋值给左边的变量。
示例
int a = 10;
a += 5; // a = 15
a -= 3; // a = 12
a *= 2; // a = 24
a /= 4; // a = 6
a %= 4; // a = 2
6. 自增和自减运算符
`++` (自增):将操作数的值增加1。例如 `a++` 或 `++a`。
`--` (自减):将操作数的值减少1。例如 `a--` 或 `--a`。
示例
int a = 5;
a++; // a 现在是 6
++a; // a 现在是 7
a--; // a 现在是 6
--a; // a 现在是 5
7. 条件运算符(三元运算符)
`?:` (条件运算符):根据条件表达式的真假值来选择执行两个表达式之一。
示例
int a = 10, b = 20;
int result;
result = (a > b) ? a : b; // result = 20
8. 逗号运算符
`,` (逗号运算符):按顺序执行一系列操作,并返回最后一个操作的值。
示例
int a = 1, b = 2, c;
c = (a += 1, b += 2, a + b); // c = 6 (a=2, b=4)
9. sizeof 运算符
`sizeof`:返回变量或数据类型的大小(以字节为单位)。
示例
int a = 10;
printf("Size of a: %lu\n", sizeof(a)); // 输出变量 a 的大小
printf("Size of int: %lu\n", sizeof(int)); // 输出数据类型 int 的大小
10. 取地址和解引用运算符
`&` (取地址):返回变量的地址。
`*` (解引用):访问指针所指向的地址的值。
示例
int a = 10;
int *p;
p = &a; // p 现在是变量 a 的地址
int b = *p; // b 现在是变量 a 的值,即 10
11.运算符的优先级
在C语言中,运算符的优先级决定了表达式中各个运算符操作的顺序。下面是常见运算符按优先级从高到低排列的列表:
-
逗号运算符
-
赋值运算符 (`=`, `+=`, `-=` 等)
-
条件运算符 (`?:`)
-
逻辑或运算符 (`||`)
-
逻辑与运算符 (`&&`)
-
按位或运算符 (`|`)
-
按位异或运算符 (`^`)
-
按位与运算符 (`&`)
-
相等性和关系运算符 (`==`, `!=`, `<`, `>`, `<=`, `>=`)
-
移位运算符 (`<<`, `>>`)
-
加法和减法运算符 (`+`, `-`)
-
乘法、除法和取模运算符 (`*`, `/`, `%`)
-
一元运算符 (如 `++`, `--`, `!`, `~`, `+`, `-`)
-
解引用和取地址运算符 (`*`, `&`)
-
sizeof运算符
优先级较高的运算符会先于优先级较低的运算符进行计算。在表达式中,可以使用圆括号 `()` 来改变运算符的计算顺序,圆括号中的表达式会先于外部的运算符进行计算。
例如,考虑以下表达式:
int a = 10, b = 5, c = 3;
int result = a + b * c;
根据运算符的优先级,乘法运算符 `*` 比加法运算符 `+` 的优先级高,因此先计算乘法,然后再进行加法运算。如果想先计算加法,可以使用圆括号来改变优先级:
int result = (a + b) * c;
这样就会先计算加法,然后再乘以 `c`。理解和正确利用运算符的优先级是编写正确和高效C语言程序的重要基础之一。