运算符示例
C 语言支持一组丰富的内置运算符。运算符是一个符号,它告诉编译器根据提供给运算符的值执行某种数学或逻辑运算。
运算符在程序中用于操作数据和变量。
在继续使用 C 语言的运算符之前,我们建议您了解 C 变量和数据类型:
运算符
c 运算符可分为以下类型:
算术运算符
关系运算符
逻辑运算符
按位运算符
赋值运算符
条件运算符
特殊运算符
让我们通过工作代码示例,一个接一个地了解这些运算符类型。
什么是操作数?
操作数是任何运算符都可以使用的值。例如,当我们说 4+5 时,这里,数字 4 和 5 是操作数,而 + 是运算符。
不同的运算符处理不同数量的操作数,就像+
运算符需要两个操作数或值一样。
算术运算符
C 语言支持加法、减法、乘法、除法等所有基本算术运算符。
下表显示了所有基本算术运算符及其说明。
| 运算符 | 描述 |
例子
(其中a
和b
是具有某个整数值的变量)
|
| --- | --- | --- |
| +
| 将两个操作数(值)相加 | a+b
|
| -
| 从第一个操作数中减去第二个操作数 | a-b
|
| *
| 将两个操作数相乘 | a*b
|
| /
| 分子除以分母,即左边的操作数除以右边的操作数 | a/b
|
| %
| 这是模运算 r,它返回两个操作数除法的余数作为结果 | a%b
|
| ++
| 这是增量运算符 -将整数值增加 1。该运算符只需要一个单操作数。 | a++
或++a
|
| --
| 这是递减运算符 -将整数值减少 1。该运算符只需要一个单操作数。 | --b
或b--
|
要了解算术运算符的执行顺序,请访问 C 运算符优先级。
示例:基本算术运算符
让我们看一个代码示例来理解 C 程序中基本算术运算符的使用。
#include <stdio.h>
int main() {
int a = 50, b = 23, result;
// addition
result = a+b;
printf("Addition of a & b = %d \n",result);
// subtraction
result = a-b;
printf("Subtraction of a & b = %d \n",result);
// multiplication
result = a*b;
printf("Multiplication of a & b = %d \n",result);
// division
result = a/b;
printf("Division of a & b = %d \n",result);
return 0;
}
a 的加法&b = 73 a 的减法&b = 27 a 的乘法&b = 1150 a 的除法& b = 2
示例:使用模数运算符(%
)
模数运算符在对提供的值进行除法运算后返回余数。
#include <stdio.h>
int main() {
int a = 23, b = 20, result;
// Using Modulus operator
result = a%b;
printf("result = %d",result);
return 0;
}
结果= 3
示例:使用递增和递减运算符
递增运算符用于将任何数值的值增加 1,而递减运算符用于将任何数值的值减少 1。
#include <stdio.h>
int main() {
int a = 10, b = 20, c, d;
/*
Using increment operator
*/
printf("Incrementing value of a = %d \n", ++a);
/*
Using decrement operator
*/
printf("Decrementing value of b = %d \n", --b);
// first print value of a, then decrement a
printf("Decrementing value of a = %d \n", a--);
printf("Value of a = %d \n", a);
// first print value of b, then increment b
printf("Incrementing value of b = %d \n", b++);
printf("Value of b = %d \n", b);
return 0;
}
a = 11 的递增值 b = 19 的递减值 a = 11 的递减值 a = 10 的递增值 b = 19 的递增值 b = 20 的值
在上面的代码示例中,我们使用了增量运算符作为++a
和b++
,而使用了减量运算符作为--b
和a--
。
当我们使用增量和减量操作符作为前缀(在操作数之前的意思),然后首先进行增量操作并使用该值,就像在前两个printf()
函数中一样,我们得到了a
和b
的更新值。
而当我们使用递增和递减运算符作为后缀(表示在操作数之后)时,则首先计算较大的表达式,在这种情况下为printf()
,然后更新操作数的值。
关系运算符
关系运算符(或比较运算符)用于检查两个操作数之间的关系。检查两个操作数是否相等或不相等或小于或大于等。
如果关系检查通过,则返回 1 ,否则返回 0 。
例如,如果我们有两个数字 14 和 7 ,如果我们说 14 大于 7 ,这是真,因此该检查将返回 1 作为关系运算符的结果。另一方面,如果我们说 14 小于 7 ,这就是假,因此会返回 0 。
下表显示了 C 语言支持的所有关系运算符。
| 运算符 | 描述 |
例子
(a``b
,其中a
= 10,b
= 11)
|
| --- | --- | --- |
| == | 检查两个操作数是否相等 | a == b
,返回 0 |
| != | 检查两个操作数是否不相等。 | a != b
,返回 1,因为a
不等于b
|
| > | 检查左边的操作数是否大于右边的操作数 | a > b
,返回 0 |
| < | 左边的检查操作数小于右边的操作数 | a < b
,返回 1 |
| >= | 检查左操作数是否大于或等于右操作数 | a >= b
,返回 0 |
| <= | 检查左边的操作数是否小于或等于右边的操作数 | a <= b
,返回 1 |
要了解关系运算符的执行顺序,请访问 C 运算符优先级。
示例:关系运算符
当我们使用关系运算符时,那么根据比较的结果,如果是真,那么输出就是 1 ,如果是假,那么输出就是 0 。我们将在下面的例子中看到同样的情况。
#include <stdio.h>
int main() {
int a = 10, b = 20, result;
// Equal
result = (a==b);
printf("(a == b) = %d \n",result);
// less than
result = (a<b);
printf("(a < b) = %d \n",result);
// greater than
result = (a>b);
printf("(a > b) = %d \n",result);
// less than equal to
result = (a<=b);
printf("(a <= b) = %d \n",result);
return 0;
}
(a = = b)= 0 (ab)= 0 (a<= b)= 1
在上面的代码示例中,a
有值 10 ,b
有值 20 ,然后对它们进行不同的比较。
在 C 语言中, true 是除零以外的任何值。而假就是零。
逻辑运算符
C 语言支持以下 3 种逻辑运算符。
| 运算符 | 描述 |
例子
(a``b
,其中a
= 1,b
= 0)
|
| --- | --- | --- |
| &&
| 逻辑“与” | a && b
,返回 0 |
| ||
| 逻辑或 | a || b
,返回 1 |
| !
| 逻辑非 | !a
,返回 0 |
这些运算符用于执行逻辑运算,并与条件语句一起使用,如 C if-else 语句。
对于和运算符,只有当两个操作数都为真时,结果才为真。
使用或运算符,如果一个单操作数为真,则结果为真。
NOT 操作符变真为假,变假为真。
示例:逻辑运算符
在下面的代码示例中,我们使用了逻辑运算符。
#include <stdio.h>
int main() {
int a = 1, b = 0, result;
// And
result = (a && b);
printf("a && b = %d \n",result);
// Or
result = (a || b);
printf("a || b = %d \n",result);
// Not
result = !a;
printf("!a = %d \n",result);
return 0;
}
(a&&b)= 0 (a | | b)= 1 (!a) = 0
C 语言中的按位运算符
按位运算符在位级别执行数据操作。这些运算符还执行从右向左的比特移位。按位运算符不适用于float
或double
、long
、double
、void
等。(了解 C 浮点和双数据类型)。
下表包含按位运算符。C 语言中有 6 位运算符。
运算符 | 描述 | 例子 |
---|---|---|
& |
按位“与” | |
| |
按位“或” | |
^ |
按位异或(异或) | |
~ |
补语 | |
>> |
右移 | |
<< |
左移位 |
按位“与”、“或”和“非”运算符的工作方式与逻辑“与”、“或”和“非”运算符相同,只是按位运算符一点一点地工作。
下面我们有一个真值表**来展示这些操作符如何在不同的值下工作。
a | b | a & b | a | b | 有 |
---|---|---|---|---|
Zero | Zero | Zero | Zero | Zero |
Zero | one | Zero | one | one |
one | Zero | Zero | one | one |
one | one | one | one | Zero |
按位运算符可以生成任意值。结果不是必须为 0 或 1。
逐位>>
和<<
运算符
按位移位运算符将位值向左或向右移位。左操作数指定要移位的值,而右操作数指定该值中的位必须移位的位置数。两个操作数具有相同的优先级。
理解,比特如何从左向右移动,反之亦然。
a = 00010000
b = 2
a << b = 01000000
a >> b = 00000100
在a << b
的情况下, 2 位在 00010000 中左移,另一个零加到另一端,也就是右边,因此该值变为 01000000
对于a >> b
, 2 位从右侧移位,因此从右侧移除两个零,在左侧添加两个零,因此该值变为 00000100
请注意,移位不像旋转一样工作,这意味着移位的位不会在另一端添加。移位的位丢失。
按位一补码(~
)运算符
一的补码运算符会将操作数中的所有 1 更改为 0,并将所有 0 设置为 1。
例如,如果原始字节是 00101100 ,那么补码后就会变成 11010011 。
示例:按位左移和右移运算符
让我们看一个例子来理解 C 程序中的按位运算符。
#include <stdio.h>
int main() {
int a = 0001000, b = 2, result;
// <<
result = a<<b;
printf("a << b = %d \n",result);
// >>
result = a>>b;
printf("a >> b = %d \n",result);
return 0;
}
a
赋值运算符
sssignation 运算符用于为变量赋值。例如,如果我们想要将值 10 赋给变量x
,那么我们可以通过使用赋值运算符来实现,如:x = 10;
这里,=
(等于)运算符用于赋值。
在 C 语言中,=
(等于)运算符是用于赋值的,然而它还有其他几个变体,如+=
、-=
在一个语句中组合两个操作。
**您可以在下表中看到所有赋值运算符。
| 运算符 | 描述 |
例子
(a
和b
是两个变量,其中 a=10,b=5)
|
| --- | --- | --- |
| =
| 从右侧操作数向左侧操作数赋值 | a=b
、a
取值 5 |
| +=
| 将右操作数加到左操作数,并将结果赋给左操作数 | a+=b
,与a=a+b
相同,a
值变为 15 |
| -=
| 从左操作数中减去右操作数,并将结果分配给左操作数 | a-=b
,与a=a-b
相同,a
值变为 5 |
| *=
| 将左操作数与右操作数相乘,并将结果赋给左操作数 | a*=b
,与a=a*b
相同,a
值变为 50 |
| /=
| 用右操作数除左操作数,并将结果分配给左操作数 | a/=b
,与a=a/b
相同,a
的值变为 2 |
| %=
| 使用两个操作数计算模数,并将结果分配给左操作数 | a%=b
,与a=a%b
相同,a
的值变为 0 |
当我们将算术运算符与赋值运算符=
组合在一起时,我们得到了所有算术运算符的简写形式。
示例:使用赋值运算符
下面我们有一个代码示例,其中我们使用了所有不同形式的赋值运算符,从基本赋值开始。
#include <stdio.h>
int main() {
int a = 10;
// Assign
int result = a;
printf("result = %d \n",result);
// += operator
result += a;
printf("result = %d \n",result);
// -= operator
result -= a;
printf("result = %d \n",result);
// *= operator
result *= a;
printf("result = %d \n",result);
return 0;
}
结果= 10 结果= 20 结果= 10 结果= 100
c 三元运算符(?
)
三元运算符,在 C 语言中也称为条件运算符,可用于 if-then-else 形式的语句。
使用三元运算符的基本语法是:
(Expression1)? Expression2 : Expression3;
以下是它的工作原理:
语法中的问号
?
代表 if 部分。第一个表达式(表达式 1)返回真或假,基于此决定是执行(表达式 2)还是(表达式 3)
如果(表达式 1)返回真,则执行(表达式 2)。
如果(表达式 1)返回假,则执行
:
右侧的表达式,即(表达式 3)。
示例:使用三元运算符
下面是一个代码示例,演示如何使用三元运算符。
#include <stdio.h>
int main() {
int a = 20, b = 20, result;
/* Using ternary operator
- If a == b then store a+b in result
- otherwise store a-b in result
*/
result = (a==b)?(a+b):(a-b);
printf("result = %d",result);
return 0;
}
结果= 40
c 特殊运算符- &
、*
、sizeof
等。
除了算术、关系、逻辑、赋值等。运算符,C 语言使用一些其他运算符,例如:
sizeof
运算符&
运算符*
运算符.
(点)和->
(箭头)操作器[]
运算符等。
sizeof
查找任意实体(变量、数组等)的大小。),&
运算符查找一个变量的地址等。您可以在下表中看到此类运算符的列表。
运算符 | 描述 | 例子 |
---|---|---|
sizeof |
返回实体的大小(以字节为单位),例如变量或数组等。 | sizeof(x) 将返回变量的大小x |
& |
返回变量的内存地址 | &x 将返回变量x 的地址 |
* |
表示指向对象的指针。* 运算符返回存储在存储器地址的值。 |
m = &x (变量x 的内存地址)*m 将返回存储在内存地址m 的值 |
. (点)运算符 |
用于访问 C 结构或 C 联合的单个元素。 | 如果emp 是包含元素int age 的结构,那么emp.age 将返回年龄值。 |
-> (箭头)操作符 |
用于使用指向结构或联合的指针来访问结构或联合元素。 | 如果p 是指向emp 结构的指针,那么我们可以使用p->age 访问age 元素 |
[] 运算符 |
用于使用索引访问数组元素 | 如果arr 是一个数组,那么我们可以使用arr[index] 来访问它的值,其中index 代表从零开始的数组索引 |
在本教程系列中,我们将继续学习*
、点运算符、箭头运算符和[]
运算符,现在让我们看看如何使用sizeof
和&
运算符。
示例:使用sizeof
和&
运算符
下面是一个代码示例,尝试使用运行代码按钮在实时代码编译器中运行。
#include <stdio.h>
int main() {
int a = 20;
char b = 'B';
double c = 17349494.249324;
// sizeof operator
printf("Size of a is: %d \n", sizeof(a));
printf("Size of b is: %d \n", sizeof(b));
printf("Size of c is: %d \n", sizeof(c));
// & operator
printf("Memory address of a: %d \n", &a);
return 0;
}
a 的大小为:4 b 的大小为:1 c 的大小为:8 a 的内存地址:1684270284
常见问题
下面是一些 C 运算符的常见问题。
Q1。C 语言中的运算符是什么?
运算符是 C 编译器已知的符号,用于对数据执行操作。运算符可用于直接对某些值( C 字面值)或对 C 变量执行运算。在 C 语言中,我们可以执行算术运算、逻辑和关系运算、按位运算等。对数据使用 C 运算符。
Q2。C 支持哪些不同类型的运算符?
C 语言支持以下类型的运算符:
算术运算符
关系运算符
逻辑运算符
按位运算符
赋值运算符
三元算子
特殊操作符如
sizeof
、&
、*
、.
(点)操作符、->
(箭头)操作符、[]
(方括号)操作符等。
Q3。*
运算符在 C 中做什么?
C 语言中的运算符是一元运算符,它返回位于地址的对象的值,该地址在`运算符之后指定。例如
q = *m会将存储在内存地址
m的值存储在
q变量中,如果
m`包含内存地址的话。
*
运算符也用于执行两个值的乘法,在这里它充当算术运算符。
Q4。!=
在 C 中是什么意思?
是不等于(!=
)运算符的符号,用于检查两个值是否相等。它是一个关系运算符,它的相反运算符是一个等号(==
)运算符,用于检查两个值或变量之间的相等性。
如果两个值不相等,那么我们将得到 1 作为比较的结果。
Q5。C 中的&
和*
运算符是什么?
两者都是特殊类型的运算符,用于执行与内存相关的操作。&
运算符用于获取变量的地址,*
运算符是&
运算符的补码,用于获取位于内存地址的对象的值。
Q6。%d 在 C 语言中做什么?
它是格式说明符,用于将格式化输出打印到控制台。在 C 语言中,与printf()
功能( C 输入输出一起使用,向控制台显示整数值。打印float
,C 提供%f
,对于char
我们用%c
,对于double
我们用%lf
等。
结论:
在本教程中,我们详细学习了所有的 C 语言操作符,并通过大量的代码示例来查看所有的操作符。