C语言中有哪些不同的运算符和表达式?


运算符是C语言中用于对值和变量执行操作的特殊符号。这些特殊符号允许我们以不同的方式操作数据和变量。这些运算符可分为以下几类:

  • 算术运算符。
  • 关系运算符。
  • 逻辑运算符。
  • 赋值运算符。
  • 自增和自减运算符。
  • 位运算符。
  • 条件运算符。
  • 特殊运算符。

C语言中的表达式是由变量、运算符和值组合而成的,产生单个结果。表达式可以分为以下两种类型:

  • 简单表达式
  • 复杂表达式

让我们先了解一下表达式,然后再简要介绍运算符。

C语言中的简单表达式

简单表达式是由一个或多个值(操作数)和符号(运算符)混合而成,产生一个结果。它不包含复杂的部分,例如函数或嵌套表达式。简单表达式通常只包含一个数学或逻辑运算。

以下是C语言中简单表达式的示例

#include <stdio.h>

int main(){
   int a = 3;      // Operand
   int b = 6;      // Operand
   int sum = a + b; // Simple Expression adds up a and b
   printf("The sum is: %d
", sum); // Print the result. return 0; }

C语言中的复杂表达式

复杂表达式是指包含多个运算符和操作数的表达式。因此,它可以包含算术、逻辑、关系、位运算等操作来获得结果。它还可以包含括号来维持正确的运算顺序。

以下是C语言中复杂表达式的示例。

#include <stdio.h>

int main() {
   int a = 5;      // Operand
   int b = 10;     // Operand
   int c = 2;      // Operand
   int result;     // Variable to store the result
        
   // Complex expression: (a + b) * c - (b / a)
   result = (a + b) * c - (b / a);
        
   printf("The result of the complex expression is: %d
", result); // Print the result return 0; }

以下是C语言中运算符类型的详细概述。

算术运算符

算术运算符用于数值计算(或)执行算术运算,例如加法、减法等。下表将帮助您更好地理解。

运算符 描述 示例 a=20,b=10 输出
+ 加法 a+b 20+10 30
- 减法 a-b 20-10 10
* 乘法 a*b 20*10 200
/ 除法 a/b 20/10 2(商)
% 取模运算 a%b 20%10 0(余数)

以下是算术运算符的C程序示例:

#include<stdio.h>
void main (){
   int a= 20, b = 10;
   printf (" %d", a+b);
   printf (" %d", a-b);
   printf (" %d", a*b);
   printf (" %d", a/b);
   printf (" %d", a%b);
}

输出

执行上述程序时,将产生以下结果:

30
10
200
20

关系运算符

关系运算符用于比较两个表达式,例如大于、小于、等于、不等于。下表提供了更清晰的说明。

运算符 描述 示例 a=20,b=10 输出
< 小于 a<b 10<20 1
<= 小于等于 a<=b 10<=20 1
> 大于 a>b 10>20 0
>= 大于等于 a>=b 10>=20 0
== 等于 a==b 10==20 0
!= 不等于 a!=b 10!=20 1

关系表达式的输出结果要么为真(1),要么为假(0)。

以下是关系运算符的C程序示例:

#include<stdio.h>
void main (){
   int a= 10, b = 20;
   printf (" %d", a<b);
   printf (" %d", a<=b);
   printf (" %d", a>b);
   printf (" %d", a>=b);
   printf (" %d", a ==b);
   printf (" %d", a !=b);
}

输出

执行上述程序时,将产生以下结果:

1 1 0 0 0 1 1 1

逻辑运算符

逻辑运算符用于逻辑上组合2个或多个表达式。它们就像特殊的工具,可以帮助我们根据真或假答案在程序中做出决策。想象一下,你正在玩一个游戏,你需要检查是否满足某些条件才能获胜。例如,你可能需要知道你是否有足够的积分以及是否收集了特殊的物品。逻辑运算符帮助我们一起测试这些情况,以便我们可以在程序中决定下一步做什么。

逻辑运算符有三种类型。它们如下:

  • 逻辑与(&&)
  • 逻辑或(||)
  • 逻辑非(!)

逻辑与(&&)

逻辑与运算符(&&)是编程中一项基本工具,它允许我们检查两个条件是否同时为真。假设你有两个问题,你想知道两个答案是否都是“是”。如果是,则结果为真。如果两个答案中任何一个为“否”,则结果为假。

下表显示了与运算符的工作原理。

exp1 exp2 exp1&&exp2
T T T
T F F
F T F
F F F

逻辑或(||)

逻辑或运算符(||)在编程中非常有用。它允许我们检查两个条件中至少有一个是否为真。可以将其想象为提出两个问题,并想知道其中任何一个问题是否得到“是”的答案。如果任一条件为真,则总体结果为真。如果两者都为假,则结果为假。

下表提供了有关或(||)的更多详细信息。

exp1 exp2 exp1||exp2
T T T
T F T
F T T
F F F

逻辑非(!)

逻辑非运算符(!)是编程中一个独特的工具,它可以帮助我们翻转特定条件的真值。可以将其想象为一个开关,将“是”变成“否”,或将“真”变成“假”。如果某件事为真,则使用逻辑非运算符将使其变为假,如果某件事为假,则它将变为真。

下表提供了有关非运算符的更多详细信息

exp !exp
T F
F T

逻辑运算符总结及示例

运算符 描述 示例 a=20,b=10 输出
&& 逻辑与 (a>b)&&(a<c) (10>20)&&(10<30) 0
|| 逻辑或 (a>b)||(a<=c) (10>20)||(10<30) 1
! 逻辑非 !(a>b) !(10>20) 1

以下是逻辑运算符的C程序示例:

#include<stdio.h>
void main (){
   int a= 10, b = 20, c= 30;
   printf (" %d", (a>b) && (a<c));
   printf (" %d", (a>b) || (a<c));
   printf (" %d", ! (a>b));
}

输出

执行上述程序时,将产生以下结果:

0 1 1

赋值运算符

赋值运算符是帮助我们为变量赋值的符号。当我们想要将值存储在变量中时,就会使用它们。赋值运算符的类型包括:

  • 简单赋值。
  • 复合赋值。

简单赋值

简单赋值运算符(=)用于为变量赋值。它获取右侧的值并将其放入左侧的变量中。就像将数字或单词放入特定的盒子中一样。

复合赋值

复合赋值运算符一次执行两件事。首先,它们执行数学运算,例如加法、减法、乘法或除法,然后将结果存储回同一个变量中。

下表包含赋值运算符及其示例:

运算符 描述 示例
= 简单赋值 a=10
+=,-=,*=,/=,%= 复合赋值 a+=10"a=a+10
a=10"a=a-10

以下是赋值运算符的C程序示例:

#include<stdio.h>
void main (){
   int a= 10;
   printf (" %d", a);
   printf (" %d", a+=10);
}

输出

执行上述程序时,将产生以下结果:

10
20

自增和自减运算符

让我们了解一下什么是自增运算符。

自增运算符(++)

此运算符将变量的值加1。

它包括两种类型:

  • 前置自增
  • 后置自增

如果我们将自增运算符放在操作数之前,则称为前置自增。稍后,先将值加1,然后对它执行下一个操作。

例如:

z = ++a; // a= a+1
z=a

如果我们将自增运算符放在操作数之后,则称为后置自增,并且在执行操作后将值加1。

例如:

z = a++; // z=a
a= a+1

示例

以下是自增运算符的C程序示例:

#include <stdio.h>
void main() {
   int a= 10, z;
   z= ++a;
   printf("z=%d", z);
   printf("
a=%d", a); z= a++; printf("
z=%d", z); printf("
a=%d", a); }

输出

执行上述程序时,将产生以下结果:

z=11
a=11
z=11
a=12

自减运算符(--)

它用于将变量的值减1。

它包括两种类型:

  • 前置自减
  • 后置自减

如果自减运算符放在操作数之前,则称为前置自减。在此,先将值减1,然后对它执行操作。

例如:

z = - - a; // a= a-1
z=a

如果自减运算符放在操作数之后,则称为后置自减。在此,在执行操作后将值减1。

例如:

z = a--; // z=a
a= a-1

以下是自减运算符的C程序示例:

#include <stdio.h>

void main() {
   int a=10, z;
   z= --a;
   printf("z=%d", z);
   printf("
a=%d", a); z= a--; printf("
z=%d", z); printf("
a=%d", a); }

输出

执行上述程序时,将产生以下结果:

z=9
a=9
z=9
a=8

位运算符

位运算符直接作用于数字的二进制(位级)形式。在计算机中,数字以一系列0和1的形式存储,称为位。位运算符帮助我们直接操作这些位,这对于某些类型的编程任务非常有用。

位运算符的类型如下表所示

运算符 描述
& 按位与
| 按位或
^ 按位异或
<< 左移
>> 右移
~ 按位取反

C语言中的按位与(&)

按位与(&)运算符从右侧开始逐位比较两个数字。如果两个位都为1,则结果为1;如果两个位中任何一个为0,则结果为0。

示例代码

5 & 3;  // In binary: 101 & 011 = 001 (Result is 1)

输出

1
按位与
a b a&b
0 0 0
0 1 0
1 0 0
1 1 1


按位或(|)

此运算符逐位比较数字。如果任何一个位为1,则结果为1;如果两个位都为0,则结果为0。

示例代码

5 | 3;  // In binary: 101 | 011 = 111 (Result is 7)

输出

7
按位或
a b a|b
0 0 0
0 1 1
1 0 1
1 1 1


按位异或(^)

此运算符逐位比较两个数字。如果两个位都为1或都为0,则结果为0;如果它们不同,则结果为1。

示例代码

5 ^ 3;  // In binary: 101 ^ 011 = 110 (Result is 6)

输出

6
按位异或
a b a^b
0 0 0
0 1 1
1 0 1
1 1 0

左移

如果值左移一次,则其值加倍。就像我们每次左移都将数字乘以2一样。

例如,a = 10,则a<<1 = 20

右移

如果变量的值右移一次,则其值变为原始值的一半。这与左移相反,就像我们每次右移都将数字除以2一样。

例如,a = 10,则a>>1 = 5

按位取反

它将所有1转换为0,将所有0转换为1。

例如,a = 5,则~a=2 [仅当考虑4位时]。

以下是另一个位运算符的C程序示例:

#include<stdio.h>
void main (){
   int a= 20, b = 10,c=10;
   printf (" %d", a<<1);
   printf (" %d", b>>1);
   printf (" %d", ~c);
}

输出

执行上述程序时,将产生以下结果:

40
5
11

带符号

按位取反 = - [给定数字 + 1]

例如,~10 = - [10+1] = -11

~-10 = - [-10+1] = 9

无符号

按位取反 = [65535 – 给定数字]

条件运算符(?:)

条件运算符,也称为三元运算符,是在编程中做出决策的一种简单易行的方法。它允许我们根据特定条件从两个选项中选择一个值。

三元运算符的语法如下:

exp1? exp2: exp3

如果exp1为真,则计算exp2。否则,计算exp3。或者以if-else的形式表示。

if (exp1)
   exp2;
else
   exp3;

以下是条件运算符的C程序示例:

#include<stdio.h>
void main (){
   int z;
   z = (5>3) ? 1:0;
   printf ("%d",z);
}

输出

执行上述程序时,将产生以下结果:

特殊运算符

一些特殊运算符包括逗号、取地址符(&)、sizeof运算符。

  • 逗号 ( , ) − 用于分隔变量。例如:a=10, b=20
  • 地址 (&) − 获取变量的地址。
  • sizeof ( ) − 用于获取变量数据类型的大小(以字节为单位)。

以下是 C 语言特殊运算的程序示例:

#include <stdio.h>

int main() {
    int a = 10;
    float b = 20;

    printf("a = %d, b = %.1f
", a, b); printf("a address = %p
", (void*)&a); printf("b address = %p
", (void*)&b); printf("a size = %ld
", sizeof(a)); printf("b size = %ld
", sizeof(b)); return 0; }

输出

执行上述程序时,将产生以下结果:

a=10 b=20.00
Address of a =1 2 3 4
Address of b = 5 6 7 8 Only for this example
Size of a = 4 bytes
Size of b = 4 bytes

更新于: 2024年11月12日

浏览量 12K+

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告