C语言基础(第四期:运算符与表达式)

本文详细介绍了C语言中的各种运算符,包括算术运算符、关系运算符、逻辑运算符、赋值运算符以及sizeof运算符,阐述了它们的用法、优先级和结合规则,并通过实例代码展示了运算符的使用。此外,还讨论了左值和右值的概念,以及复合赋值运算符的优势。
摘要由CSDN通过智能技术生成

一、运算符分类

二、算术运算符与算术表达式

三、关系运算符与关系表达式

四、逻辑运算符与逻辑表达式

五、赋值运算符

六、sizeof运算符

七、运算符优先级


一、运算符分类

C语言提供了13种类型的运算符,如下所示:

(1)算术运算符

(2)关系运算符

(3)逻辑运算符

(4)位运算符

(5)赋值运算符

(6)条件运算符

(7)逗号运算符

(8)指针运算符

(9)求字节运算符

(10)强制类型转换

(11)分量运算符

(12)下标运算符

(13)其他

二、算术运算符以及算术表达式

1.原理

算术运算符包含+、-、*、/和%,当一个表达式中同时出现这5种运算符时,先进行乘(*)、除(/)、取余(%)、取余也叫取模,后进行加(+)、减(-),也就是乘、除、取余运算符的优先级高于加、减运算符。除%运算符外,其余几种运算符既适用于浮点型数,又适用于整型数,当操作数/的两个操作数都是整型数时,他执行整除运算,在其他情况下执行浮点型数除法,%为取模运算符,他接收两个整型操作数,将左操作数除以右操作数,但它的返回值是余数而不是商,由算术运算符组成的式子称为算术表达式,表达式一定会有一个对应的值。

2.代码

#include<stdio.h>
int main(){
    int result=4+5*2-6/3+11%4;
    printf("result=%d\n",result);
    return 0;
}

运行结果:

三、关系运算符与关系表达式

    • 原理

关系运算符>、<、==、>=、<=、!=依次为大于、小于、等于、大于等于、小于等于、不等于

由关系运算符组成的表达式称为关系表达式、关系表达式的值只有真与假,对应的值为1与0,由于c语言中没有boolean类型,所以在c语言中0代表假,非0就是真,例如:关系表达式3>4为假,因此整体值为0,而关系表达式5>2为真,因此整体值为1,关系运算符的优先级低于算术运算符。

    • 代码

#include<stdio.h>
int main(){
    int a;
    while(scanf("%d",&a)){
        if(3<a&&a<10){
            printf("a在3与10之间"); 
        } else{
            printf("a不在3与10之间"); 
        }
    }
    return 0;
}

运行结果:

四、逻辑运算符与逻辑表达式

1.原理

逻辑运算符!、&&、||依次为逻辑非、逻辑与、逻辑或,这和数学上的与、或、非是一致的、逻辑非的优先级高于算术运算符,逻辑与和逻辑或的优先级低于关系运算符,逻辑表达式的值只有真与假,对应的值为1与0。

2.代码

#include<stdio.h>
#include<stdlib.h>
int main(){
    int i;
    while(scanf("%d",&i)){
        if(i%4==0 && i%100!=0 || i%400==0 ){
            printf("i is leap year\n");
        }else{
            printf("i is not leap year\n");
        }
    }
    return 0;
}

运行结果

五、赋值运算符

1.原理

为了理解有些操作符存在的限制,必须理解左值(L-value)和右值(R-value)之间的区别,这两个术语多年前由编译器设计者创造并沿用至今,尽管他们的定义与C语言并不严格吻合。

左值是那些能够出现在赋值符号左边的东西,右值是那些·可以出现在赋值符号右边的东西。

例如:a=b+25;

其中,a是一个左值,因为它标识了一个存储结果值的地点:b+25是一个右值,因为它指定了一个值。

b+25=a;

这种是不对的,因为每个位置都包含一个值,所以原先用作左值的a,此时也可以作为右值,然而,b+25不能作为左值。

因为他并未标识一个特定的位置(并不对应特定的内存空间),因此,上面这条赋值语句是非法的。

2.代码

#include<stdio.h>
int main(){
    int a = 1,b=2;
    b=a+25;
    return 0;
}

3.复合赋值运算符

复合赋值运算符操作是一种缩写形式,使用复合赋值运算符能使对变量的赋值操作变得更加简洁,例如:

iNum = iNum + 5;

对变量iNum的赋值进行操作,值为变量本身与一个整型常量5相加的结果,使用复合语句可以实现同样的操作,例如,上面的语句可以修改为

iNum+=5;

赋值运算符与复合赋值运算符的区别如下:

(1)复合赋值运算符简化了程序,可使程序精炼,提升阅读速度。

(2)复合赋值运算符提高了编译效率。

#include<stdio.h>
#include<stdlib.h>
int main(){
    int iNum,iResult;
    iNum=10;
    iResult=3;
    iNum+=5;
    iResult*=iNum;
    printf("iNum=%d\n",iNum);
    printf("iResult=%d\n",iResult);
    return 0;
}

运行结果

六、字节运算符sizeof

很多同学会认为sizeof是一个函数,这种理解是错误的,实际sizeof是一个运算符,不像其他运算符,sizeof是字母组成的,用于求常量或变量所占用的空间大小。

#include<stdio.h>
int main(){
    int i = 0;
    printf("i size is %d\n",sizeof(i));
    return 0;
}

运行结果:

七、优先级表

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

从左到右


{}

圆括号

(表达式)/函数名(形参表)


.

成员选择(对象)

对象.成员名


->

成员选择(指针)

对象指针->成员名


2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式


sizeof

长度运算符

sizeof(表达式)


3

/

表达式/表达式

从左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

从左到右

双目运算符

-

表达式-表达式

5

<<

左移

变量<<表达式

从左到右

双目运算符

>>

右移

变量>>表达式

6

>

大于

表达式>表达式

从左到右

双目运算符

>=

大于等于

表达式>=表达式

<

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

从左到右

双目运算符

!=

不等于

表达式!=表达式

8

&

按位与

表达式&表达式

从左到右

双目运算符

9

~

按位异或

表达式~表达式

从左到右

双目运算符

10

|

按位或

表达式|表达式

从左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

从左到右

双目运算符

12

||

逻辑或

表达式||表达式

从左到右

双目运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文艺小青年111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值