目录
前言
C语言中的运算符主要可以分为以下几种类型:
- 算术运算符:用于执行数学计算,如加法、减法、乘法和除法等。
- 关系运算符:用于比较两个值之间的关系,例如等于、不等于、大于、小于、大于等于和小于等于。
- 逻辑运算符:用于连接多个条件判断,包括逻辑与、逻辑或和逻辑非。
- 位运算符:用于按位操作整数类型的数据,如位与、位或、位异或、位取反以及移位运算符。
- 赋值运算符:用于给变量赋值,除了基本的赋值外,还包括复合赋值运算符,如加赋值、减赋值等。
- 杂项运算符:这一类包括了其他一些特殊的运算符,如条件运算符(三元运算符)、逗号运算符和 sizeof 运算符等。
- 指针运算符:包括取地址运算符和取内容运算符。
- 求字节数运算符:用于计算数据类型或对象所占用的内存大小。
- 特殊运算符:可能指的是一些不常见的或者是特定编译器支持的运算符。
这些运算符在编写C语言程序时起着至关重要的作用,它们使得程序员能够以更简洁的方式表达复杂的操作。了解和掌握这些运算符的使用是学习C语言的基础。
一.算数运算符
1.1 算数运算符
C语言中的算术运算符包括以下几种:
- 加法(+):用于两个数值的相加。
- 减法(-):用于两个数值的相减或者一个数值与负数的相加。
- 乘法(*):用于两个数值的相乘。
- 除法(/):用于两个数值的相除,结果为商。
- 取模(%):用于两个数值相除后的余数。
- 自增(++):用于将变量的值增加1,可以是前缀或后缀形式。
- 自减(--):用于将变量的值减少1,可以是前缀或后缀形式。
这些运算符是编程中进行数学计算的基础,它们可以单独使用,也可以与其他运算符结合使用,形成复杂的表达式。在编写程序时,了解它们的优先级和结合性是非常重要的,这有助于正确理解和计算表达式的结果。
1.2 算数运算案例
- 加法(+):用于两个数值的相加。
- 减法(-):用于两个数值的相减或者一个数值与负数的相加。
- 乘法(*):用于两个数值的相乘。
- 除法(/):用于两个数值的相除,结果为商。
- 取模(%):用于两个数值相除后的余数。
- 自增(++):用于将变量的值增加1,可以是前缀或后缀形式。
- 自减(--):用于将变量的值减少1,可以是前缀或后缀形式。
int a = 5; int b = 3; int sum = a + b; // sum 的值为 8 int a = 5; int b = 3; int difference = a - b; // difference 的值为 2 int a = 5; int b = 3; int product = a * b; // product 的值为 15 int a = 6; int b = 3; int quotient = a / b; // quotient 的值为 2 int a = 6; int b = 3; int remainder = a % b; // remainder 的值为 0 int a = 5; ++a; // a 的值变为 6 int a = 5; a++; // a 的值变为 6 int a = 5; --a; // a 的值变为 4 int a = 5; a--; // a 的值变为 4
二.关系运算符
2.1关系运算符
C语言中的关系运算符用于比较两个值之间的关系,包括以下几种:
- 等于(==):检查两个值是否相等。
- 不等于(!=):检查两个值是否不相等。
- 大于(>):检查左边的值是否大于右边的值。
- 小于(<):检查左边的值是否小于右边的值。
- 大于等于(>=):检查左边的值是否大于或等于右边的值。
- 小于等于(<=):检查左边的值是否小于或等于右边的值。
关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,
<
、<=
、>
、>=
的优先级相同,高于==
和!=
,而==
和!=
的优先级相同。在C语言中,关系运算符的结果通常用整数表示,其中1代表真(即表达式关系成立),0代表假(即表达式关系不成立)。例如,
1 > 2
的结果是0,因为1不大于2;而1 < 2
的结果是1,因为1小于2。这些关系运算符通常用于控制流程语句中,如if条件语句和循环语句中,以根据不同的条件执行不同的代码分支。通过组合这些关系运算符,可以构建复杂的条件表达式来满足程序逻辑的需求。
2.2 关系运算案例
- 等于(==):检查两个值是否相等。
- 不等于(!=):检查两个值是否不相等。
- 大于(>):检查左边的值是否大于右边的值。
- 小于(<):检查左边的值是否小于右边的值。
- 大于等于(>=):检查左边的值是否大于或等于右边的值。
- 小于等于(<=):检查左边的值是否小于或等于右边的值。
int a = 5; int b = 3; int result = (a == b); // result 的值为 0,因为 5 不等于 3 int a = 5; int b = 3; int result = (a != b); // result 的值为 1,因为 5 不等于 3 int a = 5; int b = 3; int result = (a > b); // result 的值为 1,因为 5 大于 3 int a = 5; int b = 3; int result = (a < b); // result 的值为 0,因为 5 不小于 3 int a = 5; int b = 3; int result = (a >= b); // result 的值为 1,因为 5 大于或等于 3 int a = 5; int b = 3; int result = (a <= b); // result 的值为 0,因为 5 不小于或等于 3
三.逻辑运算符
3.1 逻辑运算符
C语言中的逻辑运算符用于连接或反转条件表达式的真假值,主要包括以下几种:
- 逻辑与(&&):当两个操作数都为真时,结果为真;否则为假。具有短路特性,即如果第一个操作数为假,则不会计算第二个操作数。
- 逻辑或(||):当至少一个操作数为真时,结果为真;如果两个操作数都为假,则结果为假。同样具有短路特性,即如果第一个操作数为真,则不会计算第二个操作数。
- 逻辑非(!):用于反转操作数的逻辑状态,即真变假,假变真。
这些逻辑运算符通常用于构建复杂的条件表达式,可以简化if-else语句,使得程序代码更加简洁和高效。例如,使用逻辑与可以判断两个条件是否同时满足,而逻辑或则用于判断多个条件中是否有至少一个满足。逻辑非用于否定一个条件,常用于if语句中的条件取反。
在实际编程中,逻辑运算符的应用非常广泛,它们可以帮助程序员表达复杂的逻辑关系,是编写控制流程不可或缺的工具。了解并掌握这些逻辑运算符的使用对于学习C语言至关重要。
3.2 逻辑运算案例
- 逻辑与(&&):
- 逻辑或(||):
- 逻辑非(!):
int a = 5; int b = 3; int result = (a > 2) && (b < 4); // result 的值为 1,因为 5 大于 2 且 3 小于 4 int a = 5; int b = 3; int result = (a > 6) || (b < 4); // result 的值为 1,因为 5 不大于 6,但 3 小于 4 int a = 5; int result = !(a > 2); // result 的值为 0,因为 5 大于 2,取反后为假
四.位运算符
4.1 位运算符
C语言中的位运算符用于对二进制位进行操作,可以高效地完成诸如设置位、清除位、翻转位、检查位等操作。以下是C语言中主要的六种位运算符:
- 按位与(&):用于将两个数的对应位进行逻辑与操作。如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。它通常用于清零或屏蔽某些位。
- 按位或(|):用于将两个数的对应位进行逻辑或操作。如果两个相应的二进制位中至少有一个为1,则该位的结果值为1,否则为0。它通常用于设置某些位。
- 按位异或(^):用于将两个数的对应位进行逻辑异或操作。如果两个相应的二进制位相异(一个为1,一个为0),则该位的结果值为1,否则为0。它通常用于切换某些位的状态。
- 按位取反(~):这是一个单目运算符,用于将数的所有位取反。即1变为0,0变为1。
- 左移(<<):用于将数的位向左移动指定的位数。左移一位相当于将该数乘以2。
- 右移(>>):用于将数的位向右移动指定的位数。右移一位通常相当于将该数除以2。
需要注意的是,位运算符的操作数是按位进行计算的,不同于算术运算符的按值计算。在C语言中,位运算符的优先级高于逻辑运算符和算术运算符,但低于关系运算符。了解这些位运算符的使用可以帮助编写更高效的代码,特别是在处理底层硬件操作或进行优化时。
4.2 位运算符案例
- 按位与(&):
- 按位或(|):
- 按位异或(^):
- 按位取反(~):
- 左移(<<):
- 右移(>>):
int a = 5; // 二进制表示为 0101 int b = 3; // 二进制表示为 0011 int result = (a & b); // result 的值为 1,因为 0101 & 0011 = 0001 int a = 5; // 二进制表示为 0101 int b = 3; // 二进制表示为 0011 int result = (a | b); // result 的值为 7,因为 0101 | 0011 = 0111 int a = 5; // 二进制表示为 0101 int b = 3; // 二进制表示为 0011 int result = (a ^ b); // result 的值为 6,因为 0101 ^ 0011 = 0110 int a = 5; // 二进制表示为 0101 int result = (~a); // result 的值为 -6,因为 ~0101 = 1010,即-6 int a = 5; // 二进制表示为 0101 int result = (a << 2); // result 的值为 20,因为 0101 << 2 = 10100,即20 int a = 5; // 二进制表示为 0101 int result = (a >> 2); // result 的值为 1,因为 0101 >> 2 = 0001,即1
五.赋值运算符
5.1 赋值运算符
C语言中的赋值运算符用于将一个值赋给变量。以下是C语言中主要的五种赋值运算符:
- 等于(=):用于将右侧的值赋给左侧的变量。例如,
a = 5;
表示将整数5赋给变量a。- 加等于(+=):用于将右侧的值与左侧变量的当前值相加,并将结果赋给左侧变量。例如,
a += 3;
表示将整数3与变量a的当前值相加,并将结果赋给变量a。- 减等于(-=):用于将右侧的值与左侧变量的当前值相减,并将结果赋给左侧变量。例如,
a -= 2;
表示将整数2从变量a的当前值中减去,并将结果赋给变量a。- 乘等于(*=):用于将右侧的值与左侧变量的当前值相乘,并将结果赋给左侧变量。例如,
a *= 4;
表示将整数4与变量a的当前值相乘,并将结果赋给变量a。- 除等于(/=):用于将右侧的值与左侧变量的当前值相除,并将结果赋给左侧变量。例如,
a /= 2;
表示将变量a的当前值除以整数2,并将结果赋给变量a。这些赋值运算符通常用于给变量赋值或更新变量的值。在编写程序时,需要根据具体的需求选择合适的赋值运算符来构建表达式。同时,需要注意赋值运算符的优先级和结合性,以确保正确的计算顺序。
5.2 赋值运算符案例
- 等于(=):
- 加等于(+=):
- 减等于(-=):
- 乘等于(*=):
- 除等于(/=):
int a; a = 5; // 将整数5赋给变量a int a = 5; a += 3; // 将整数3与变量a的当前值相加,并将结果赋给变量a,即a = a + 3 int a = 5; a -= 2; // 将整数2从变量a的当前值中减去,并将结果赋给变量a,即a = a - 2 int a = 5; a *= 4; // 将整数4与变量a的当前值相乘,并将结果赋给变量a,即a = a * 4 int a = 10; a /= 2; // 将变量a的当前值除以整数2,并将结果赋给变量a,即a = a / 2
六. 杂项运算符
6.1 杂项运算符
C语言中的杂项运算符包括以下几种:
- 逗号(,):用于连接两个表达式,并返回最后一个表达式的值。例如,
int result = (a = 5, b = 3);
表示将整数5赋给变量a,将整数3赋给变量b,并将整数3赋给变量result。- 条件运算符(?:):用于根据条件选择两个表达式中的一个进行计算。例如,
int max = (a > b) ? a : b;
表示如果a大于b,则将a赋给变量max,否则将b赋给变量max。- sizeof运算符:用于获取数据类型或对象的大小(以字节为单位)。例如,
sizeof(int)
返回整数类型的大小,sizeof(array)
返回数组的大小。- 取地址运算符(&):用于获取变量的内存地址。例如,
int *ptr = &a;
表示将变量a的地址赋给指针变量ptr。- 解引用运算符(*):用于获取指针指向的变量的值。例如,
int value = *ptr;
表示将指针ptr指向的变量的值赋给变量value。- 类型转换运算符:用于将一个数据类型转换为另一个数据类型。例如,
double d = (double)i;
表示将整数i转换为双精度浮点数d。这些杂项运算符在编程中具有重要的作用,可以帮助我们实现更复杂的逻辑和操作。在编写程序时,需要根据具体的需求选择合适的杂项运算符来构建表达式。同时,需要注意运算符的优先级和结合性,以确保正确的计算顺序。
6.2 杂项运算符案例
- 逗号(,):
- 条件运算符(?:):
- sizeof运算符:
- 取地址运算符(&):
- 解引用运算符(*):
- 类型转换运算符:
int a = 5; int b = 3; int result = (a = 5, b = 3); // result 的值为 3,因为 a = 5 返回 5,b = 3 返回 3,所以逗号表达式的值为最后一个表达式的值 int a = 5; int b = 3; int max = (a > b) ? a : b; // max 的值为 5,因为 a > b 为真,所以选择 a 作为结果 int size = sizeof(int); // size 的值为 4,因为整数类型的大小为 4 字节 int a = 5; int *ptr = &a; // ptr 指向变量 a 的内存地址 int a = 5; int *ptr = &a; int value = *ptr; // value 的值为 5,因为指针 ptr 指向变量 a,所以解引用 ptr 得到变量 a 的值 int i = 5; double d = (double)i; // d 的值为 5.0,因为将整数 i 转换为双精度浮点数 d
七. 指针运算符
7.1 指针运算符
C语言中的指针运算符用于对指针进行操作,包括以下几种:
- 取地址运算符(&):用于获取变量的内存地址。例如,
int *ptr = &a;
表示将变量a的地址赋给指针变量ptr。- 解引用运算符(*):用于获取指针指向的变量的值。例如,
int value = *ptr;
表示将指针ptr指向的变量的值赋给变量value。- 递增运算符(++)和递减运算符(--):用于改变指针的值。递增运算符使指针指向下一个存储单元,递减运算符使指针指向上一个存储单元。例如,
ptr++;
表示将指针ptr指向下一个存储单元,ptr--;
表示将指针ptr指向上一个存储单元。- 加法运算符(+)和减法运算符(-):用于计算指针与整数之间的差值。例如,
ptr + 2;
表示将指针ptr向后移动两个存储单元,ptr - 3;
表示将指针ptr向前移动三个存储单元。这些指针运算符在编程中具有重要的作用,可以帮助我们操作和管理内存。在编写程序时,需要根据具体的需求选择合适的指针运算符来构建表达式。同时,需要注意运算符的优先级和结合性,以确保正确的计算顺序。
7.2 指针运算符案例
- 取地址运算符(&):
- 解引用运算符(*):
- 递增运算符(++)和递减运算符(--):
- 加法运算符(+)和减法运算符(-):
int a = 5; int *ptr = &a; // 将变量a的地址赋给指针变量ptr int a = 5; int *ptr = &a; int value = *ptr; // 将指针ptr指向的变量的值赋给变量value,即value的值为5 int arr[] = {1, 2, 3, 4, 5}; int *ptr = arr; // 将数组arr的首元素地址赋给指针变量ptr ptr++; // 将指针ptr指向下一个存储单元,即指向数组arr的第二个元素 int value = *ptr; // 将指针ptr指向的变量的值赋给变量value,即value的值为2 int arr[] = {1, 2, 3, 4, 5}; int *ptr = arr; // 将数组arr的首元素地址赋给指针变量ptr int value = *(ptr + 2); // 将指针ptr向后移动两个存储单元,然后解引用得到该位置的值,即value的值为3
八.求字节数运算符
8.1 求字节数运算符
C语言中没有专门的求字节数运算符,但可以通过sizeof运算符来获取数据类型或对象的大小(以字节为单位)。例如:
int size = sizeof(int); // 获取整数类型的大小,即4字节
需要注意的是,sizeof运算符返回的是数据类型或对象的大小,而不是变量的值。如果要获取变量的字节数,可以使用sizeof运算符结合指针来实现。例如:
int a = 5; int size = sizeof(a); // 获取变量a的字节数,即4字节
九.特殊运算符
9.1特殊运算符
C语言中的特殊运算符包括以下几种:
- 取地址运算符(&):用于获取变量的内存地址。例如,
int *ptr = &a;
表示将变量a的地址赋给指针变量ptr。- 解引用运算符(*):用于获取指针指向的变量的值。例如,
int value = *ptr;
表示将指针ptr指向的变量的值赋给变量value。- 类型转换运算符:用于将一个数据类型转换为另一个数据类型。例如,
double d = (double)i;
表示将整数i转换为双精度浮点数d。- 条件运算符(?:):用于根据条件选择两个表达式中的一个进行计算。例如,
int max = (a > b) ? a : b;
表示如果a大于b,则将a赋给变量max,否则将b赋给变量max。- 逗号(,):用于连接两个表达式,并返回最后一个表达式的值。例如,
int result = (a = 5, b = 3);
表示将整数5赋给变量a,将整数3赋给变量b,并将整数3赋给变量result。- 位运算符:用于对二进制位进行操作。例如,
int result = a & b;
表示将变量a和变量b进行按位与操作,并将结果赋给变量result。- 逻辑运算符:用于对真值进行操作。例如,
int result = (a > 0) && (b < 0);
表示如果a大于0且b小于0,则将真值1赋给变量result,否则将假值0赋给变量result。- sizeof运算符:用于获取数据类型或对象的大小(以字节为单位)。例如,
sizeof(int)
返回整数类型的大小,sizeof(array)
返回数组的大小。- 取地址运算符(&):用于获取变量的内存地址。例如,
int *ptr = &a;
表示将变量a的地址赋给指针变量ptr。- 解引用运算符(*):用于获取指针指向的变量的值。例如,
int value = *ptr;
表示将指针ptr指向的变量的值赋给变量value。这些特殊运算符在编程中具有重要的作用,可以帮助我们实现更复杂的逻辑和操作。在编写程序时,需要根据具体的需求选择合适的特殊运算符来构建表达式。同时,需要注意运算符的优先级和结合性,以确保正确的计算顺序。