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; // 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

增强型赋值运算符

除了=运算符之外,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\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
c_operators.htm
广告
© . All rights reserved.