C语言运算符详细介绍及示例代码

 2024-02-19 05:03:16  阅读 0

C 运算

运算符是告诉编译器执行特定数学或逻辑运算的符号。 C语言具有丰富的内置运算符,提供了以下类型的运算符:

算术运算符 关系运算符 逻辑运算符 按位运算符 赋值运算符 杂项运算符

本章将一一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等运算符。

算术运算符

下表列出了 C 语言支持的所有算术运算符。 假设变量A的值为10,变量B的值为20,则:

运算符描述示例

添加两个操作数

A + B 将得到 30

从第一个操作数中减去第二个操作数

A - B 将得到 -10

两个操作数相乘

A*B 将获得 200

将分子除以分母

B/A 将得到 2

模运算符,除法后的余数

B % A 将得到 0

++

自增运算符,整数值加1

A++将得到11

--

自减运算符,将整数值减 1

A-- 将得到 9

例子

请看以下示例,了解 C 语言中所有可用的算术运算符:

# main(){ int a = 21; 整数 b = 10; 整数c; c = a + b; ("第 1 行 - c 的值为 %dn", c ); c = a - b; ("第 2 行 - c 的值为 %dn", c ); c = a * b; ("第 3 行 - c 的值为 %dn", c ); c = a / b; ("第 4 行 - c 的值为 % dn", c ); c = a % b; ("第 5 行 - c 的值为 %dn", c ); c = a++; ("第 6 行 - c 的值为 %dn", c ); c = a--; ("第 7 行 - c 的值为 %dn", c );}

当上面的代码被编译并执行时,会产生以下结果:

第 1 行 - c 的值为 2 - c 的值为 3 - c 的值为 4 - c 的值为 2 第 5 行 - c 的值为 1 第 6 行 - c 的值为 7 - c 的值c 是 22

关系运算符

下表列出了C语言支持的所有关系运算符。 假设变量A的值为10,变量B的值为20,则:

运算符描述示例

==

检查两个操作数的值是否相等,如果相等则条件为真。

(A == B) 不正确。

!=

检查两个操作数的值是否相等,如果不相等则条件成立。

(A != B) 为真。

检查左操作数的值是否大于右操作数的值,如果是,则条件成立。

(A > B) 不正确。

检查左操作数的值是否小于右操作数的值,如果是,则条件成立。

(A < B) 为真。

>=

检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。

(A >= B) 不正确。

> 2 将得到 15,即 0000 1111

例子

请看以下示例,了解 C 语言中所有可用的按位运算符:

# main(){ int a = 60;/* 60 = 0011 1100 */ int b = 13;/* 13 = 0000 1101 */ int c = 0;c = a & b; /* 12 = 0000 1100 */ ("第 1 行 - c 的值为 %dn", c ); c = a | 乙; /* 61 = 0011 1101 */ ("第 2 行 - c 的值为 %dn", c ); c = a^b; /* 49 = 0011 0001 */ ("第 3 行 - c 的值为 %dn", c ); c = ~a; /*-61 = 1100 0011 */ ("第 4 行 - c 的值为 % dn", c ); c = a > 2; /* 15 = 0000 1111 */ ("第 6 行 - c 的值为 %dn", c );}

当上面的代码被编译并执行时,会产生以下结果:

第 1 行 - c 的值为 2 - c 的值为 3 - c 的值为 4 - c 的值为 - 5 - c 的值为 6 - c 的值为 15

赋值运算符

下表列出了C语言支持的赋值运算符:

运算符描述示例

简单赋值运算符,将右操作数的值赋给左操作数

C = A + B 将把 A + B 的值赋给 C

+=

加法和赋值运算符将右操作数与左操作数相加的结果赋给左操作数。

C += A 等价于 C = C + A

-=

减法 AND 赋值运算符将左操作数减去右操作数的结果赋给左操作数。

C -= A 相当于 C = C - A

*=

乘法和赋值运算符将右操作数与左操作数相乘的结果赋给左操作数。

C *= A 相当于 C = C * A

/=

除法和赋值运算符将左操作数除以右操作数的结果赋给左操作数。

C /= A 相当于 C = C / A

%=

取模和赋值运算符,查找两个操作数的模并将其分配给左侧操作数

C %= A 相当于 C = C % A

> 2

&=

按位 AND 和赋值运算符

C &= 2 相当于 C = C & 2

^=

按位异或和赋值运算符

C ^= 2 相当于 C = C ^ 2

|=

按位或和赋值运算符

C |= 2 相当于 C = C | 2

例子

请看以下示例,了解 C 语言中所有可用的赋值运算符:

# main(){ int a = 21; 整数c; c = a; ("第 1 行 - = 运算符实例,c 的值 = %dn", c ); c+=a; ("第 2 行 - += 运算符实例,c 的值 = %dn", c ); c-=a; ("第3行- -=算子实例,c的值=%dn", c ); c*=a; ("第 4 行 - *= 运算符实例,c 的值 = %dn", c ); c /= a; ("第 5 行 - /= 运算符实例,c 的值 = %dn", c ); c = 200; c%=a; ("第 6 行 - %= 运算符实例,c 值 = %dn", c ); c = 2; ("第 8 行 - >>= 运算符实例,c 值 = %dn" , c ); c &= 2; ("第 9 行 - &= 运算符实例,c 的值 = %dn", c ); c^=2; ("第 10 行 - ^= 运算符实例,c 的值 = %dn", c ); c | = 2; ("第 11 行 - |= 运算符实例,c 的值 = %dn", c );}

当上面的代码被编译并执行时,会产生以下结果:

第 1 行 - = 运算符实例,c 的值 = 2 - += 运算符实例,c = 3 的值 - -= 运算符实例,c = 4 的值 - *= 运算符实例,c = 5 的值 - /= 运算符实例, c = 6 的值 - %= 运算符实例,c = 7 的值 - = 运算符实例,c = 9 的值 - &= 运算符实例,c = 2Line 的值 10 - ^= 运算符实例,c = 0Line 的值11 - |= 运算符实例,c 的值 = 2

杂项运算符 ↦ 和三元

下表列出了 C 语言支持的其他一些重要运算符,包括 和 ?:。

运算符描述示例

()

返回变量的大小。

(a) 将返回 4,其中 a 是整数。

返回变量的地址。

&A; 将给出变量的实际地址。

指向一个变量。

*A; 将指向一个变量。

条件表达式

如果条件为真呢? 则值为 X:否则值为 Y

例子

看一下下面的示例,了解 C 语言中可用的所有杂项运算符:

# main(){ int a = 4; 短b; C; int* 指针; /* 运算符实例*/ ("第 1 行 - 变量 a 的大小 = %dn", (a) ); ("第 2 行 - 变量 b 的大小 = %dn", (b) ); ("第 3 行 - 变量 c 的大小 = %dn", (c) ); /* & 和 * 运算符示例*/ ptr = &a;/* ' ptr' 现在包含 'a' 的地址*/ ("a 的值为 %dn", a); ("*ptr 是 %dn", *ptr); /* 三元运算符示例*/ a = 10; b = (a == 1) ? 20:30; ("b 的值为 %dn", b ); b = (a == 10) ? 20:30; ("b 的值为 %dn", b );}

当上面的代码被编译并执行时,会产生以下结果:

a的值为4*ptr,4b的值为30,b的值为20

C 中的运算符优先级

运算符的优先级决定表达式中术语的组合。 这会影响表达式的计算方式。 某些运算符的优先级高于其他运算符,例如,乘法和除法运算符的优先级高于加法和减法运算符。

例如,x = 7 + 3 * 2,这里,x被赋值为13而不是20,因为运算符*的优先级高于+,所以先计算乘法3*2,然后加上7。

下表按运算符优先级降序列出了运算符,优先级较高的运算符出现在表上方,优先级较低的运算符出现在表下方。 在表达式中,首先计算优先级较高的运算符。

范畴运算符结合性

后缀

() [] -> . ++ - -

从左到右

1元

+ - ! ~ ++ - - (类型)* &

右到左

乘法和除法

*/%

从左到右

加减

+ -

从左到右

转移

从左到右

关系

<>=

从左到右

平等的

==!=

从左到右

位与

从左到右

按位异或

从左到右

位或

从左到右

逻辑与

&&

从左到右

逻辑或

||

从左到右

状况

右到左

任务

= += -= *= /= %=>>=

C存储类

存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。 这些说明符放置在它们修改的类型之前。 下面列出了 C 程序中可用的存储类别:

汽车

自动存储类

auto 存储类别是所有局部变量的默认存储类别。

{ int 挂载; 自动月份;}

上面的示例定义了两个具有相同存储类别的变量。 auto只能在函数内部使用,即auto只能修改局部变量。

存储类

存储类用于定义存储在寄存器而不是 RAM 中的局部变量。 这意味着变量的最大大小等于寄存器(通常是一个字)的大小,并且不能对其应用一元“&”运算符(因为它没有内存位置)。

{ int 英里;}

寄存器仅用于需要快速访问的变量,例如计数器。 还应该注意的是,定义“”并不意味着变量将存储在寄存器中,而是意味着变量可以存储在寄存器中,具体取决于硬件和实现限制。

存储类

存储类指示编译器在程序的生命周期内保持局部变量处于活动状态,而不必在每次进入和离开作用域时创建和销毁它。 因此,使用修饰的局部变量允许您在函数调用之间维护局部变量的值。

修饰符也可以应用于全局变量。 修改全局变量时,会将变量的范围限制为声明该变量的文件。

在 C 编程中,当在类数据成员上使用时,它只会导致该成员的一份副本被该类的所有对象共享。

# /* 函数声明*/void func(void); 整数计数 = 5; /* 全局变量*/ main(){ while(count--) { func(); } 0; }/* 函数定义*/void func( void ){ int i = 5; /* 局部静态变量*/ i++; (“i 为 %d,计数为 %dn”,i,计数);}

你可能还不理解这个例子,因为我使用了函数和全局变量,这两个概念到目前为止还没有解释。 即使你现在还没有完全理解,也没有关系。 我们将在后续章节中详细解释。 当上面的代码被编译并执行时,会产生以下结果:

i 为 6,计数为 4i 为 7,计数为 3i 为 8,计数为 2i 为 9,计数为 1i 为 10,计数为 0

存储类

存储类用于提供对全局变量的引用,该变量对所有程序文件都可见。 当使用''时,对于无法初始化的变量,变量名指向先前定义的存储位置。

当你有多个文件并且定义了一个可以在其他文件中使用的全局变量或函数时,你可以在其他文件中使用它来获取对所定义的变量或函数的引用。 可以理解为用于在另一个文件中声明一个全局变量或函数。

当有两个或多个文件共享相同的全局变量或函数时,通常使用修饰符,如下所示:

第一个文件:main.c

# 整数计数; 空白 (); main(){ 计数 = 5; ();}

第二个文件:.c

# int 计数; void (void){ ("计数为 %dn", count);}

这里,第二个文件中的关键字用于声明第一个文件 main.c 中已定义的 count。 现在,按如下方式编译这两个文件:

$gcc main.c .c

这会生成 a.out 可执行程序,执行时会产生以下结果:

C判断

判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时执行的语句(必需)和条件为假时执行的语句(可选)。

C 语言假定任何非零和非空值为 true,零或 null 为 false。

以下是大多数编程语言中典型判断结构的一般形式:

法官判决

C语言提供了以下几种判断语句。 单击链接可查看每条声明的详细信息。

声明说明

if 语句

if 语句由一个布尔表达式后跟一个或多个语句组成。

if...else 语句

if 语句后面可以跟一个可选的 else 语句,当布尔表达式为 false 时执行该语句。

嵌套 if 语句

您可以在另一个 if 或 else if 语句中使用 if 或 else if 语句。

陈述

语句允许测试等于多个值的变量。

嵌套语句

您可以在一个语句中使用另一个语句。

? : 操作员

我们已经解释了条件运算符 ? :在上一章中,可以用它来代替 if...else 语句。 其一般形式如下:

经验1? 经验2:经验3;

其中,Exp1、Exp2、Exp3为表达式。 请注意冒号的使用和位置。

? 表达式的值由 Exp1 确定。 如果 Exp1 为 true,则计算 Exp2,结果是整个 ? 的值。 表达。 如果 Exp1 为 false,则计算 Exp3,结果是整个 ? 的值。 表达。

标签: 运算 变量 实例

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码