geekdoc-python-zh/docs/overiq/017.md

3.6 KiB
Raw Permalink Blame History

C 语言中的赋值运算符

原文:https://overiq.com/c-programming-101/assignment-operator-in-c/

最后更新于 2020 年 7 月 27 日


我们之前已经多次使用赋值运算符(=)。我们在这里详细讨论一下。赋值运算符(=)用于给变量赋值。其一般格式如下:

variable = right_side

赋值运算符左侧的操作数必须是变量,右侧的操作数必须是常量、变量或表达式。以下是一些例子:

x = 18  // right operand is a constant
y = x    // right operand is a variable
z = 1 * 12 + x   // right operand is an expression

赋值运算符的优先级低于我们到目前为止讨论的所有运算符,它从右向左关联。

我们也可以同时给多个变量赋值。

x = y = z = 100

这里xyz初始化为100

因为赋值运算符(=)的关联性是从右向左的。上述表达式相当于以下内容:

x = (y = (z = 100))

请注意,表达式如下:

x = 18
y = x
z = 1 * 12 + x

被称为赋值表达式。如果我们在表达式的末尾放一个分号(;)如下:

x = 18;
y = x;
z = 1 * 12 + x;

那么赋值表达式就变成了赋值语句。

复合赋值运算符

使用变量的旧值来计算其新值的赋值操作称为复合赋值。

考虑以下两种说法:

x = 100;
x = x + 5;

这里第二个语句将5添加到x的现有值中。该值随后被分配回x。现在,x的新价值是105

为了更简洁地处理这些操作C 语言提供了一种特殊的操作符,称为复合赋值操作符。

复合赋值运算符的一般格式如下:

variable op= expression

其中op可以是任意算术运算符(+-*/%)。上述语句在功能上等同于以下内容:

variable = variable op (expression)

:除了算术运算符,op还可以是>>(右移)、<<(左移)、|(按位 OR)、&(按位 AND)、^(按位异或)。我们还没有讨论这些操作符。

计算表达式后,op运算符应用于表达式的结果和变量的当前值(在 RHS 上)。这个操作的结果然后被分配回变量(在 LHS 上)。让我们举一些例子:声明:

x += 5;

相当于x = x + 5;x = x + (5);

同样,该声明:

x *= 2;

相当于x = x * 2;x = x * (2);

由于op运算符右侧的expression首先被求值,因此语句:

x *= y + 1;

相当于x = x * (y + 1)

复合赋值运算符的优先级相同,它们从右向左关联(参见优先级表)。

下表列出了一些复合赋值运算符:

操作员 描述
+= x += 5相当于x = x + 5
-= y -= 5相当于y = y - 5
/= z /= 3相当于z = z / 5
%= m %= 10相当于m = m % 10

以下程序演示了复合赋值运算符的作用:

#include<stdio.h>

int main(void)
{

    int i = 10;

    char a = 'd';
    printf("ASCII value of %c is %d\n", a, a); // print ASCII value of d

    a += 10; // increment a by 10;
    printf("ASCII value of %c is %d\n", a, a); // print ASCII value of n

    a *= 5; // multiple a by 5;
    printf("a = %d\n", a); 

    a /= 4; // divide a by 4;
    printf("a = %d\n", a); 

    a %= 2; // remainder of a % 2;
    printf("a = %d\n", a); 

    a *= a + i;  // is equivalent to  a = a * (a + i)
    printf("a = %d\n", a);

    return 0; // return 0 to operating system
}

预期输出:

ASCII value of d is 100
ASCII value of n is 110
a = 38
a = 9
a = 1
a = 11