• 赋值运算符及赋值表达式,C语言赋值运算符及其赋值表达式详解

    赋值操作是程序设计中最常用的操作之一,C 语言共提供了 11 个赋值运算符,均为二元运算符,其中仅有一个为基本赋值运算符 =,其余 10 个均是复合赋值运算符,即:

    • 基本赋值运算符:=。
    • 复合赋值运算符:+=(加赋值)、-=(减赋值)、*=(乘赋值)、/=(除赋值)、%=(求余赋值)、 <<=(左移赋值)、>>=(右移赋值)、&=(按位与赋值)、|=(按位或赋值)、*A=(按位异或赋值)。

    赋值操作的优先级较低,仅高于逗号运算符。

    基本赋值 =

    如 int a=5; 表示把 5 赋值给整型变量 a,不能读成 “a等于5”。赋值号左边必须为左值,赋值号右边的右值可以为常量、变量或表达式。如下赋值均是正确的。

    int a,b; //定义整型变量a和b
    a=3; //把常量3赋值给a,右值为常量
    b=a; //把变量a的值赋给b,右值为变量
    b=a+3; //把求和表达式a+3的值赋给b,右值为表达式

    以下赋值均是错误的。

    int a=2;
    3=a; //错误,常量3不能作为左值
    const int b=5; //定义整型常变量只读变量b,并初始化为5,其值不能被改变
    b=1; //错误,企图改变常变量的值,即常变量不能作左值

    复合赋值:+=、-=、*=、/=、%=

    a+=b; 等价于 a=a+b;
    a-=b; 等价于 a=a-b;
    a*=b; 等价于 a=a*b;
    a/=b; 等价于 a=a/b;

    例如:

    int a=5;
    a+=3; //等价于 a=a+3;

    由于赋值运算符的优先级很低,仅高于逗号运算符,故最后做赋值操作。

    a+=3+2; 等价于 a=a+(3+2);

    通过下面的例子,掌握上述 4 种复合赋值运算符。

    【例 1】分析以下程序,输出其运行结果。

    #include<stdio.h>
    int main (void)
    {
        int a=l,b=2,c=3; //定义三个整型变量,并初始化
        float d=10.2f; //定义float变量d,用浮点常量10.2初始化
        a+=1; //相当于 a=a+1;即 a=1+1=2
        b-=a+5;
        c*=a-4;
        printf ("%d,%d,%d,%f",a,b,c,d/=a);
        return 0;
    }

    代码分析:
    1) float d=10.2f; 如果改为 float d=10.2; 虽然没有语法错误,可以正常运行,但一般编译器会提示 warning(警告),原因是编译器会把 10.2 等常量默认当成 double 型常量处理,与 d 的类型 float 不一致,故出现警告。因此可通过加 f 明确 10.2 为 float 型常量。

    2) a+=1; 相当于 a=a+1; 求出 a 为 2。

    3) b-=a+5; 由于赋值运算符的优先级低于算术求和运算符,故该语句等价于 b=b-(a+5);,即 b=2-(2+5);,得 b=-5;。同理,c*=a-4; 即 c=3*(2-4);,故 c=-60

    4) printf("%d,%d,%d,%f",a,b,c,d/=a); 由于输出列表中 a、b 和 c 均为 int 型变量,故输出格式占位符均为 %d;输出列表中第 4 项为表达式,其表达式的值为 d=d/a=10.2f/2=5.1,为浮点类型,输出格式占位符为 %f,在 VC++ 6.0 环境中,float 类型为小数点后保留 6 位数字。

    运行结果为:
    2,-5,-6,5.100000

更多...

加载中...