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