C语言运算符与表达式

2021-06-09 06:05

阅读:671

标签:赋值   数值   有关   再计算   计算   执行   赋值运算符   lang   大于等于   

(一) 算术运算符

1. 常用算术运算符

算术运算符用于执行程序中的数学运算,C 语言中常用的算术运算符有以下 5 种:

  • 加或正值

  • 减或负值

  • * 乘

  • / 除

  • % 取余

  1. 加法或者正值运算符“+”。作为加法运算符时是双目运算符,也就是需要有 2 个操作数参与运算,例如:a+b、1+3 等。如果作为正值运算符时是单目运算符,例如:+3、+1 等。参与加法运算的操作数可以是字面量、也可以是变量:

    #include
    int main()
    {
        int a=10;
        int b=20;
        printf("a+b=%d\n",a+b);//变量相加
        printf("a+1=%d\n",a+1);//变量与常量相加
        printf("1+1=%d\n",1+1);//字面量与字面量相加
        printf("%d\n",+a);
        printf("%d\n",+100);
        getchar();
        return 0;
    }
    
  2. 减法或者负值运算符“-”。

  3. 乘法运算符“*”。

  4. 除法运算符“/”。

    【注意】两个整数相除结果为整数,两个浮点数相除结果为浮点数,如果两个操作数中有一个是浮点数,相除结果为浮点数,示例代码如下:

    #include
    int main()
    {
        int i=5;
        int j=3;
        float f = i/j; //i/j 的值赋值给 f
        float f1=5.0f;
        float f2=3.0f;
        float f3=f1/f2;
        printf("%lf\n",f);
        printf("%lf\n",f3);
        getchar();
        return 0;
    }
    运行结果:
    1.000000
    1.666667
    

    不仅仅是除法,几乎所有运算都是:整数和整数运算结果是整数;整数和小数运算结果是小数;小数和小数的运算结果是小数。

  5. 求余运算符“%”,属于双目运算符,要求参与运算的两个操作数都必须是整数,求余运算的结果是两个数相除的余数,示例代码如下:

    #include
    int main()
    {
        int a=6;
        int b=20;
        printf("%d\n",b%a);
        getchar();
        return 0;
    }
    

2. 算术表达式

将算术运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为算术表达式,参与运算的操作数可以是字面量、变量、函数等。例如:a+1、a-b、1*10、20/2、30%4…..等等。

3. 算术运算符优先级

在数学中,算术运算有一套完整的运算规则。在 C 语言中,算术运算同样存在着规则。当算术表达式由多个不同的算术运算符组成时,会按照运算符的优先级进行运算:先乘除后加减、先括号里再括号外,优先级相同,按照自左向右的顺序进行运算,例如:a*10+(100%3)-b/10。

小括号优先级最高,先计算(100%3)。*与/优先级相同,自左向右运算,先计算 a*10,再计算 b/10。+与-优先级相同,自左向右运算,先计算加法,再计算减法。
和数学中一样,可以通过小括号()来改变运算优先级,不过 C 语言中只有(),没有[]、{},()可以嵌套多层。a*(10+100%(3-b)/10);

(二) 赋值运算符和赋值表达式

1. 赋值运算符

赋值运算符“=”,是 C 语言中使用最多的运算符,作用是将一个值(字面量值、变量值、表达式计算结果)复制一份给另一个变量。赋值运算符常见形式:
变量 = 表达式;
a = 1+1; //先计算表达式 1+1,然后将结果值赋给变量 a
变量 = 字面量;
a= 2; //将数值 2 直接赋值给变量 a
变量 = 变量;
a= b; //将变量 b 的值赋值给变量 a
示例代码如下:

#include
int main()
{
    int a;
    int b;
    int c;
    a=20; //将数值 20 赋值给变量 a
    b=a-10; //先计算 a-10,然后将计算结果赋值给变量 b
    c=a+b; //先计算 a+b,然后将计算结果赋值给变量 c
    printf("a=%d\n",a);
    printf("b=%d\n",b);
    printf("c=%d\n",c);
    getchar();
    return 0;
}

【注意】
赋值运算符的右边必须是变量,以下写法都是错误的:
20=30; //错误写法
100=a; //错误写法
左边也不能是表达式:a+2=5; 这样也错。

2. 赋值表达式

将赋值运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为赋值表达式,参与运算的操作数可以是字面量、变量、表达式、函数……等。例如:a= 1+1、a=2、a=a+1、a=b 等等。

b=a+1 的读法是“a+1 的值赋值给 b”,很显然 a=a+1 的读法是“a+1 的值赋值给 a”

3. 赋值运算符优先级

赋值运算符在 C 语言中优先级是最低的。赋值运算都是最后执行,例如:
c=a*10+100%3-b/10;
上述程序中,既有算术运算符,又有赋值运算符。因为赋值运算符优先级是最低的,因此可以将上述程序分为 2 部分看待,先执行=右边的算术表达式,然后将计算结果赋值给=左边的变量 c。

4. 赋值表达式的结果

前面讲过,C 语言中任何一个表达式都会产生一个结果值,赋值表达式也是如此。赋值表达式的结果就是=左边被赋值变量的值,例如:
int a=10;
int c =(a=a+1);
printf("%d\n",c);
printf("%d\n",c=c+1);

5. 复合赋值运算符

在赋值运算符前加上其他运算符,就可以构成复合运算符。例如:在“=”前加一个“-”就构成复合运算符“-=”。在 C 语言中,常用的复合赋值运算有以下几种:
a+=10; //等价于 a=a+10;
a-=10; //等价于 a=a-10;
a*=10; //等价于 a=a*10;
a/=10; //等价于 a=a/10;
a%=10; //等价于 a=a%10;

(三) 自增(++)、自减(--)运算符

1. 自增(++)运算符

自增运算符“++”由 2 个“+”组成,作用是将变量值增加 1,在 C 语言中,“++”的位置不同表达的意思也不相同,需要分 2 种情况:
++x; //x 先自增 1,然后再参加运算
x++; //x 先参与运算,然后自增 1
示例代码如下:

#include
int main()
{
    int a=1;
    a++;
    printf("a=%d\n",a);
    getchar();
    return 0;
}
运行结果:
a=2

#include
int main()
{
    int a=1;
    ++a;
    printf("a=%d\n",a);
    getchar();
    return 0;
}
运行结果:
a=2

这样,a++和++a 都相当于 a=a+1,后面讲差别。

2. 自增运算表达式

将自增运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为自增运算表达式,参与运算的操作数只能是变量,不能是字面量、表达式等。
以下都是错误写法:
++100 //错误写法,不能是字面量
(a+1)++ //错误写法,不能是表达式
前面讲过,“++”的位置不同表达的意思也不相同,下面通过例子来深入了解一下:

#include
int main()
{
    int a=1;
    int b=0;
    b=a++; //后++
    printf("a=%d\n",a);
    printf("b=%d\n",b);
    getchar();
    return 0;
}
运行结果:
a=2
b=1

#include
int main()
{
    int a=1;
    int b=0;
    b=++a; //前++
    printf("a=%d\n",a);
    printf("b=%d\n",b);
    getchar();
    return 0;
}
运行结果:
a=2
b=2

我们知道,C 程序中表达式都会返回一个结果值,自增运算表达式也是如此。如果是“变量++”,返回变量自加之前的值;如果是“++变量”,返回变量自加之后的值。因此,上述程序中,b=a++和 b=++a 执行过程等价于以下形式:

b=a++等价于 b=++a 等价于
b=a;
a=a+1;
a=a+1;
b=a;

3. 自减(--)运算符

自减运算符“--”由 2 个“-”组成,作用是将变量值减少 1。
也分为 i--、--i 的区别。和++类似。

(四) 关系运算符与关系表达式

1. 关系运算符

关系运算符又称“比较运算符”用于执行程序中的比较运算。C 语言中所有关系运算符都是双目运算符,也就是说需要两个操作数参与运算,常用的关系运算符有以下 6 种:
= 大于等于
== 等于
!= 不等于
注意=别写反了。

2. 关系表达式

将关系运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为关系表达式,
参与运算的操作数可以是字面量、变量、表达式、函数……等。例如:
1>2 //1 是否大于 2
1+1==b //1+1 的结果是否等于变量 b
10*20!=c //10 乘 20 的结果是否不等于变量 c
关系表达式的运算结果只有 2 种:0 或 1。0 表示关系表达式为假,1 表示关系表达式为
真。例如:

#include
int main()
{
    int a=10;
    int b=20;
    int c=30;
    printf("%d\n", 1 > 2);
    printf("%d\n", 5 >= 2);
    printf("%d\n", a 

关系表达式的结果值是整数类型,因此采用%d 格式输出。

printf("%d\n",a==b);
printf("%d\n",a=b);
不要把 a==b 写成 a=b,a=b 就是赋值表达式

(五) 逻辑运算符与逻辑表达式

1. 逻辑运算符

逻辑运算符用于对程序中的逻辑值进行运算。在日常生活中逻辑值只有 2 种:“真”或“假”。但是 C 语言中没有逻辑类型,为了解决这个问题,采用 0 代表逻辑“假”,非 0代表逻辑“真”。
举个例子:“李小龙是男人”是“真”,“李小龙是德国人”是“假”。
“李小龙是男人 并且 李小龙是德国人”是“假”,“李小龙是男人 或者 李小龙是德国人”是“真”。

C 语言提供的逻辑运算符有以下 3 种:
&& 逻辑与(并且)
|| 逻辑或(或者)
! 逻辑非

逻辑与(&&)和逻辑或(||)都是双目运算符,需要两个操作数才能进行运算。逻辑非(!)是
单目运算符,只需一个操作数即可进行运算。
C 语言逻辑运算符表示的含义如表所示:

运算符 名称 举例 说明
&& 逻辑与 a&&b a 和 b 都为真,结果为真,否则为假
|| 逻辑或 a||b a 或 b 有一个为真,结果为真。a 和 b 都为假时,结果才为假
! 逻辑非 !a a 为假,!a 结果为真;a 为真,!a 结果为假

2. 逻辑表达式

将逻辑运算符、小括号、操作数连接起来、符合 C 语言规则的式子被称为逻辑表达式,
参与运算的操作数可以是字面量、变量、表达式……等。例如:
1 && 1
a&&1
a || b
1 ||b
1>2 && 3 !a

(六) 条件运算符与条件表达式

条件运算符由“?”与“:”两个符号组成,必须一起使用,是 C 语言中唯一的三目运算符,需要三个操作数才能进行运算。
条件表达式的一般使用形式为:
表达式 1?表达式 2:表达式 3
条件表达式的运算规则为:如果表达式 1 的结果为真,以表达式 2 的值作为整个条件表达式的值,否则以表达式 3 的值作为整个条件表达式的值。例如:
max=a>b?a:b
如果 a>b 为真,将 a 赋值给 max,否则将 b 赋值给 max。a>b?a:b 被称为条件表达式。
一般为了代码结构清晰,建议使用小括号将条件运算表达式包裹起来,比如:max=(a>b?a:b)。
下面通过例子来了解一下条件运算符的使用。

#include
int main()
{
    int a=9;
    int b=0;
    b=(a>10?888:666);
    printf("b=%d\n",b);
    b=(a>5?888:666);
    printf("b=%d\n",b);
    getchar();
    return 0;
}

//使用条件运算符判断数据能否被 3 整除。
#include
int main()
{
    printf("%s\n",(6%3==0)?"6 能被 3 整除":"6 不能被 3 整除");
    printf("%s\n",(5%3==0)?"5 能被 3 整除":"5 不能被 3 整除");
    getchar();
    return 0;
}

(七) sizeof 运算符

求字节数运算符“sizeof”用于计算变量、字面量、类型所占字节数。该运算符是 C 语言中唯一一个使用单词作为运算符的:
sizeof(类型)、sizeof(字面量)、sizeof(变量)
上述表达式的运算结果为:括号中的类型在当前系统下所占字节数。
下面通过 sizeof 计算 C 语言中常用数据类型所占字节数。

sizeof 计算类型所占字节数
#include
int main()
{
    printf("sizeof(char) =%d\n", sizeof(char));
    printf("sizeof(int) =%d\n", sizeof(int));
    printf("sizeof(float) =%d\n", sizeof(float));
    printf("sizeof(double) =%d\n", sizeof(double));
    getchar();
    return 0;
}

C语言运算符与表达式

标签:赋值   数值   有关   再计算   计算   执行   赋值运算符   lang   大于等于   

原文地址:https://www.cnblogs.com/wangyueping/p/14497573.html


评论


亲,登录后才可以留言!