C 语言中的赋值运算符
在 C 语言中,赋值运算符将一个特定的值存储在一个已声明的变量中。 C 语言中的变量可以以字面量、其他变量或表达式的形式赋值。
待赋值的值构成右侧操作数,而待赋值的变量应为"="符号左侧的操作数,该符号在 C 语言中定义为简单赋值运算符。
此外,C 语言还有几个增强赋值运算符。
下表列出了 C 语言支持的赋值运算符 -
运算符 | 描述 | 示例 |
---|---|---|
= | 简单赋值运算符。将右侧操作数的值赋给左侧操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加法与赋值运算符。它将右侧操作数与左侧操作数相加,并将结果赋给左侧操作数。 | C += A 等同于 C = C + A |
-= | 减法与赋值运算符。它从左操作数中减去右操作数,并将结果赋值给左操作数。 | C -= A 等同于 C = C - A |
*= | 乘法与赋值运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。 | C *= A 等同于 C = C * A |
/= | 除法与赋值运算符。它将左操作数除以右操作数,并将结果赋值给左操作数。 | C /= A 等同于 C = C / A |
%= | 模与赋值运算符。它使用两个操作数取模,并将结果赋值给左操作数。 | C %= A 等同于 C = C % A |
<<= | 左移与赋值运算符。 | C <<= 2 与 C = C << 2 相同 |
>>= | 右移与赋值运算符。 | C >>= 2 与 C = C >> 2 相同 |
&= | 按位与赋值运算符。 | C &= 2 与 C = C & 相同2 |
^= | 按位异或赋值运算符。 | C ^= 2 与 C = C ^ 2 相同 |
|= | 按位异或赋值运算符。 | C |= 2 与 C = C | 2 相同 |
简单赋值运算符 (=)
= 运算符是 C 语言中最常用的运算符之一。根据 ANSI C 标准,所有变量都必须在开头声明。不允许在第一个处理语句之后声明变量。
您可以声明一个变量,并在代码的后面赋值,也可以在声明时初始化它。
您可以在赋值语句中使用字面量、其他变量或表达式。
int x = 10; // 声明并初始化 int y; // 声明 y = 20; // 稍后赋值 int z = x + y; // 赋值一个表达式 int d = 3, f = 5; // 定义并初始化 d 和 f。 char x = 'x'; // 变量 x 的值为 'x'。
一旦声明了特定类型的变量,就不能再赋值给任何其他类型的值。在这种情况下,C 编译器会报告类型不匹配错误。
在 C 语言中,引用内存位置的表达式称为"左值"表达式。左值可以出现在赋值语句的左侧,也可以出现在右侧。
另一方面,"右值"指的是存储在内存中某个地址的数据值。右值是一个不能被赋值的表达式,这意味着右值可以出现在赋值语句的右侧,但不能出现在左侧。
变量是左值,因此它们可以出现在赋值语句的左侧。数值字面量是右值,因此它们不能被赋值,也不能出现在左侧。请看以下有效和无效语句 -
int g = 20; // 有效语句 10 = 20; // 无效语句
增强赋值运算符
除了 = 运算符之外,C 语言还允许将算术运算符和位运算符与 = 符号组合,以形成增强赋值运算符或复合赋值运算符。增强运算符提供了一种便捷的快捷方式,可以将算术运算或位运算与赋值操作结合起来。
示例 1
例如,表达式"a += b"的效果与先执行"a + b",然后将结果赋值回变量"a"相同。
#include <stdio.h> int main(){ int a = 10; int b = 20; a += b; printf("a: %d", a); return 0; }
输出
运行代码并检查其输出 −
a: 30
示例 2
类似地,表达式"a <<= b"与先执行"a << b"然后将结果赋值回变量"a"具有相同的效果。
#include <stdio.h> int main(){ int a = 60; int b = 2; a <<= b; printf("a: %d", a); return 0; }
输出
运行代码并检查其输出 −
a: 240
示例 3
这是一个 C 程序,演示了 C 语言中赋值运算符的用法 -
#include <stdio.h> int main(){ int a = 21; int c ; c = a; printf("Line 1 - = Operator Example, Value of c = %d ", c ); c += a; printf("Line 2 - += Operator Example, Value of c = %d ", c ); c -= a; printf("Line 3 - -= Operator Example, Value of c = %d ", c ); c *= a; printf("Line 4 - *= Operator Example, Value of c = %d ", c ); c /= a; printf("Line 5 - /= Operator Example, Value of c = %d ", c ); c = 200; c %= a; printf("Line 6 - %%= Operator Example, Value of c = %d ", c ); c <<= 2; printf("Line 7 - <<= Operator Example, Value of c = %d ", c ); c >>= 2; printf("Line 8 - >>= Operator Example, Value of c = %d ", c ); c &= 2; printf("Line 9 - &= Operator Example, Value of c = %d ", c ); c ^= 2; printf("Line 10 - ^= Operator Example, Value of c = %d ", c ); c |= 2; printf("Line 11 - |= Operator Example, Value of c = %d ", c ); return 0; }
输出
当您编译并执行上述程序时,它将产生以下结果 -
Line 1 - = Operator Example, Value of c = 21 Line 2 - += Operator Example, Value of c = 42 Line 3 - -= Operator Example, Value of c = 21 Line 4 - *= Operator Example, Value of c = 441 Line 5 - /= Operator Example, Value of c = 21 Line 6 - %= Operator Example, Value of c = 11 Line 7 - <<= Operator Example, Value of c = 44 Line 8 - >>= Operator Example, Value of c = 11 Line 9 - &= Operator Example, Value of c = 2 Line 10 - ^= Operator Example, Value of c = 0 Line 11 - |= Operator Example, Value of c = 2