C语言基础--运算符
- 算术运算符:加、减、乘、除、取余、自增、自减
- 关系运算符:等于、不等于、大于、小于、大于等于、小于等于
- 逻辑运算符:与、或、非
- 位运算符:按位与、按位或、按位异或、取反、左移、右移
- 赋值运算符:等于、加等、减等、乘等、除等、取余等、左移等、右移等、按位与等、按位或等、按位异或等
- 条件运算符(三目运算符):expression1 ? expression2 : expression3
- 逗号运算符:连接两个或多个表达式,并按顺序计算每个表达式,最终返回最后一个表达式的值。
一、算术运算符
C语言中常用的算术运算符包括:
- "+" 加号,用于加法运算,如 a + b 表示将 a 和 b 相加。
- "-" 减号,用于减法运算,如 a - b 表示将 a 减去 b 的值。
- "*" 乘号,用于乘法运算,如 a * b 表示将 a 和 b 相乘。
- "/" 除号,用于除法运算,如 a / b 表示将 a 除以 b 的值。
- "%" 取余号,用于取余数运算,如 a % b 表示将 a 对 b 取余数。
"++"和"--"是C语言中的自增运算符和自减运算符,它们的作用是让变量自加1或自减1。
自增运算符"++"的使用方法有两种:
1.前缀自增运算符:++a,表示先将变量a自增1,然后再使用变量a。
2.后缀自增运算符:a++,表示先使用变量a,然后再将变量a自增1。
自减运算符"--"同样有前缀和后缀两种使用方法。
例如:
int a = 10;
int b = ++a; //先将a自增1,再将a的值赋给b,此时a=11,b=11
int c = a--; //先将a的值赋给c,再将a自减1,此时a=10,c=11
需要注意的是,在表达式中使用++或--时,它们的执行顺序是从右到左,即先执行++或--操作,再进行其他运算。例如:
int a = 10;
int b = 5 + a++; //先将a的值(10)加到5上,得到15,然后将a自增1,此时a=11,b=15
int c = 5 + ++a; //先将a自增1,得到12,然后将a的值(12)加到5上,得到17,此时a=12,c=17
二、关系运算符
C语言中的关系运算符用于比较两个变量或表达式之间的大小关系,运算结果为真或假。
常见的关系运算符有以下几种:
-
">" 大于运算符,用于判断左边的变量或表达式是否大于右边的变量或表达式,例如a > b。
-
"<" 小于运算符,用于判断左边的变量或表达式是否小于右边的变量或表达式,例如a < b。
-
">=" 大于等于运算符,用于判断左边的变量或表达式是否大于或等于右边的变量或表达式,例如a >= b。
-
"<=" 小于等于运算符,用于判断左边的变量或表达式是否小于或等于右边的变量或表达式,例如a <= b。
-
"==" 等于运算符,用于判断左边的变量或表达式是否等于右边的变量或表达式,例如a == b。
-
"!=" 不等于运算符,用于判断左边的变量或表达式是否不等于右边的变量或表达式,例如a != b。
关系运算符返回的结果是一个布尔值,即真(1)或假(0)。例如:
int a = 5, b = 10;
if (a > b) {
printf("a > b");
} else {
printf("a <= b");
}
这段代码中,因为a小于等于b,所以输出结果为"a <= b"。
三、逻辑运算符
C语言中的逻辑运算符用于连接两个或多个表达式,并根据表达式的值计算一个逻辑值true或false。常见的逻辑运算符有以下三种:
-
逻辑与运算符"&&",它表示两个表达式都为真(非0)时,整个表达式才为真。
-
逻辑或运算符"||",它表示两个表达式中只要有一个为真(非0),整个表达式就为真。
-
逻辑非运算符"!",它表示对一个表达式进行取反操作,如果该表达式为真,则返回假(0),反之亦然。
例如:
int a = 5, b = 10;
if (a > 0 && b < 20) {
printf("a和b都满足条件");
} else {
printf("a和b至少有一个不满足条件");
}
输出结果为"a和b都满足条件",因为a大于0,b小于20,两个条件都满足。如果将"a > 0"改为"a < 0",则输出结果为"a和b至少有一个不满足条件",因为a不满足条件。
四、位运算符
C语言中的位运算符用于对二进制位进行操作,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移位(<<)和右移位(>>)
- 按位与(&):两个二进制数对应位都为1时,结果为1,否则为0。
例如: 7 & 3 = 3
7 的二进制为 0111,3 的二进制为 0011,按位与的结果为 0011,其十进制为3。
- 按位或(|):两个二进制数对应位有一位为1时,结果为1,否则为0。
例如: 7 | 3 = 7
7 的二进制为 0111,3 的二进制为 0011,按位或的结果为 0111,其十进制为7。
- 按位异或(^):两个二进制数对应位不相同时,结果为1,否则为0。
例如: 7 ^ 3 = 4
7 的二进制为 0111,3 的二进制为 0011,按位异或的结果为 0100,其十进制为4。
- 按位取反(~):对一个二进制数进行按位取反。
例如: ~7 = -8
7 的二进制为 0111,按位取反后得到 1000,其十进制为-8。
- 左移位(<<):将一个二进制数的所有位向左移动指定的位数。
例如: 7 << 2 = 28
7 的二进制为 0111,左移2位后得到 11100,其十进制为28。
- 右移位(>>):将一个二进制数的所有位向右移动指定的位数。
例如: 7 >> 2 = 1
7 的二进制为 0111,右移2位后得到 0001,其十进制为1。
五、赋值运算符
C语言中的赋值运算符用来给变量赋值,包括基本的赋值运算符(=)以及复合赋值运算符(+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=)。
- 基本的赋值运算符(=):将右边的值赋给左边的变量。
例如: a = 10;
这条语句将10赋给变量a。
- 复合赋值运算符(+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=):先进行运算,再将结果赋给左边的变量。
例如: a += 10;
这条语句等价于 a = a + 10; 即先将a加上10再将结果赋给a。
其余的复合赋值运算符同理,分别是减等于(-=)、乘等于(*=)、除等于(/=)、取模等于(%=)、左移等于(<<=)、右移等于(>>=)、按位与等于(&=)、按位异或等于(^=)、按位或等于(|=)。
六、条件运算符
C语言中的条件运算符是 ? :,也称为三目运算符,它是C语言中唯一的一个三元运算符。
条件运算符 ? : 的语法格式为:
表达式1 ? 表达式2 : 表达式3
表达式1为条件表达式,结果为真或假,如果为真,则返回表达式2的值,否则返回表达式3的值。
示例:
int a = 10;
int b = 5;
int max = (a > b) ? a : b;
上述示例中,条件表达式 a > b 返回的值为真,因此 max 的值为 a 的值,即 10。
条件运算符通常用在赋值语句中,可以根据条件进行不同的赋值操作,这样可以简化代码并提高程序的可读性。
注意:在条件运算符中,表达式2和表达式3必须是同种数据类型,否则编译器将会自动进行类型转换。
七、逗号运算符
C语言中的逗号运算符(,)用于在表达式中连接多个表达式,并按照顺序依次执行这些表达式,返回最后一个表达式的值。
逗号运算符的语法格式为:
表达式1, 表达式2, 表达式3, ..., 表达式n
逗号运算符会按照顺序执行这些表达式,并返回最后一个表达式的值。
示例:
int a = 1, b = 2, c = 3, sum = 0;
sum = (a++, b++, c++, a + b + c);
上述示例中,逗号运算符连接了4个表达式,分别是 a++, b++, c++, a+b+c。逗号运算符会依次执行这些表达式,首先执行 a++, 然后是 b++, 最后是 c++。最终的返回值是 a + b + c 的值,即 6。在执行完逗号运算符后,a、b、c的值分别为 2、3、4,sum的值为 6。
八、运算符优先级
在C语言中,不同的运算符优先级不同,如果一个表达式中有多种运算符,那么按照运算符优先级的顺序进行计算。下面是C语言运算符优先级的表格(从高到低):
| 运算符 | 描述 |
|---|---|
| ()、[]、->、. | 从左到右 |
| ++、-- | 前缀自增、前缀自减 |
| +、-、!、~、++、--、(类型)、* | 正负号、逻辑非、按位取反、强制类型转换、前缀自增、前缀自减、解引用 |
| *、/、% | 乘、除、取模 |
| +、- | 加、减 |
| <<、>> | 按位左移、按位右移 |
| <、<=、>、>= | 关系运算符 |
| ==、!= | 相等、不等 |
| & | 按位与 |
| ^ | 按位异或 |
| | | 按位或 |
| && | 逻辑与 |
| || | 逻辑或 |
| ? : | 条件运算符 |
| =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|= | 赋值运算符 |
在表达式中优先级最高的是括号运算符 (),其次是数组下标运算符 [],结构体成员运算符 -> 和 .。如果表达式中有多个运算符,先计算优先级高的运算符,然后再计算优先级低的运算符。如果有多个运算符的优先级相同,则按照从左到右的顺序进行计算。
更多推荐


所有评论(0)