Cprogramming 简明教程

Assignment Operators in C

在 C 语言中,赋值运算符将某个值存储在已声明的变量中。C 语言中的一个变量可以被赋予一个字面量、另一个变量或一个表达式的形式。

待赋值的值作为右侧操作数,而要赋值的变量应为“ = ”符号左侧的操作数,该符号在 C 中定义为一个简单的赋值运算符。

此外,C 有几个补充赋值运算符。

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

Operator

Description

Example

=

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

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

+=

加 AND 赋值运算符。它将右侧操作数加到左侧操作数,并将结果赋值给左侧操作数。

C += A 等效于 C = C + A

-=

减 AND 赋值运算符。它从左侧操作数中减去右侧操作数,并将结果赋值给左侧操作数。

C -= A 等效于 C = C - A

*=

乘 AND 赋值运算符。它将右侧操作数乘以左侧操作数,并将结果赋值给左侧操作数。

C *= A 等效于 C = C * A

/=

除 AND 赋值运算符。它将左侧操作数除以右侧操作数,并将结果赋值给左侧操作数。

C /= A 等效于 C = C / A

%=

模 AND 赋值运算符。它使用两个操作数进行模运算,并将结果赋值给左侧操作数。

C %= A 等效于 C = C % A

<⇐

左移和赋值运算符。

C <⇐ 2 等效于 C = C << 2

>>=

右移和赋值运算符。

C >>= 2 等效于 C = C >> 2

&=

Bitwise AND assignment operator.

C &= 2 等效于 C = C & 2

^=

按位异或运算符和赋值运算符。

C ^= 2 等同于 C = C ^ 2

=

按位或运算符和赋值运算符。

C

= 2 等同于 C = C

2

Simple Assignment Operator (=)

= 运算符是 C 中使用最频繁的运算符之一。根据 ANSI C 标准,所有变量都必须一开始就声明。不允许在第一个处理语句之后声明变量。

您可以在代码后期声明一个变量以赋值,或者您可以在声明时初始化它。

您可以在赋值语句中使用字面量、另一个变量或表达式。

int x = 10; // declaration with initialization
int y;      // declaration
y = 20;     // assignment later
int z = x + y; // assign an expression
int d = 3, f = 5; // definition and initializing d and f.
char x = 'x'; // the variable x has the value 'x'.

一旦声明了某个类型的变量,就不能给它赋值任何其他类型的。在这种情况下,C 编译器会报告类型不匹配错误。

在 C 中,引用内存位置的表达式称为“左值”表达式。左值可以作为赋值语句的左侧或右侧。

另一方面,术语右值是指存储在内存中某个地址的数据值。右值是一个不能对其赋值的表达式,这意味着右值可以出现在赋值语句的右侧,但不能出现在其左侧。

变量是左值,因此它们可能出现在赋值的左手。数字文字是右值,因此不能被赋值,不能出现在赋值的左手。看一看以下有效和无效的声明 −

int g = 20; // valid statement
10 = 20;    // invalid statement

Augmented Assignment Operators

除了 = 运算符,C 允许您将算术运算符和按位运算符与 = 符号组合起来,以形成增强赋值运算符或复合赋值运算符。增强运算符为将算术运算或按位运算与赋值相结合提供了一个方便的捷径。

Example 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

Example 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

Example 3

以下是演示在 C 中使用赋值运算符的 C 程序:

#include <stdio.h>

int main(){

   int a = 21;
   int c ;

   c =  a;
   printf("Line 1 - =  Operator Example, Value of c = %d\n", c );

   c +=  a;
   printf("Line 2 - += Operator Example, Value of c = %d\n", c );

   c -=  a;
   printf("Line 3 - -= Operator Example, Value of c = %d\n", c );

   c *=  a;
   printf("Line 4 - *= Operator Example, Value of c = %d\n", c );

   c /=  a;
   printf("Line 5 - /= Operator Example, Value of c = %d\n", c );

   c  = 200;
   c %=  a;
   printf("Line 6 - %%= Operator Example, Value of c = %d\n", c );

   c <<=  2;
   printf("Line 7 - <<= Operator Example, Value of c = %d\n", c );

   c >>=  2;
   printf("Line 8 - >>= Operator Example, Value of c = %d\n", c );

   c &=  2;
   printf("Line 9 - &= Operator Example, Value of c = %d\n", c );

   c ^=  2;
   printf("Line 10 - ^= Operator Example, Value of c = %d\n", c );

   c |=  2;
   printf("Line 11 - |= Operator Example, Value of c = %d\n", 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