【408专项篇】C语言笔记-第三章(运算符与表达式)

第三章:运算符与表达式

第一节:算数运算符与关系运算符

1. 运算符的分类

C语言提供了13中类型的运算符。

序号类型备注
1算数运算符+ - * / %
2关系运算符> < == >= <= !=
3逻辑运算符! && ||
4位运算符<< >> ~ | ^ &
5赋值运算符=及其扩展赋值运算符
6条件运算符? :
7逗号运算符,
8指针运算符*和&
9求字节数运算符sizeof
10强制类型转换运算符(类型)
11分量运算符->
12下标运算符[ ]
13其他运算符( )
2. 算数运算符及算数表达式

乘、除、取余运算符的优先级高于加、减运算符。

%为取余(取模)运算符,它接收两个整型操作数,将左操作数除以右操作数,但它返回值是余数而不是商

由算数运算符组成的式子称为算数表达式,表达式一定有一个值。

#include <stdio.h>

int main() {
    int result=4+5*2-6/3+10%4;
    printf("result=%d\n",result);
    return 0;
}
F:\Computer\Project\practice\3\3.2-arithmetic\cmake-build-debug\3_2_arithmetic.exe
result=14

进程已结束,退出代码为 0
3. 关系运算符与关系表达式

由关系运算符组成的表达式称为关系表达式。关系表达式的值只有真和假,对应的值为1和0

C语言中没有布尔类型,0代表假,非0即为真。

关系运算符的优先级低于算数运算符。

判断整型变量i是否等于3时,可以写成3==i,即把常量写在变量的前面,如果少写了一个等号会编译不通,便于发现问题。

编写程序时,如果要判断三个数是否相等,不能将三个数写到一起,if(5=5=5)的写法是错的。正确如下:

#include <stdio.h>

int main() {
    int a;
    while (scanf("%d",&a)){
        if(a>3 && a<10){
            printf("a is between 3 and 10\n");
        } else{
            printf("a is not between 3 and 10\n");
        }
    }
    return 0;
}
F:\Computer\Project\practice\3\3.2-relation\cmake-build-debug\3_2_relation.exe
3
a is not between 3 and 10
5
a is between 3 and 10
m

进程已结束,退出代码为 0

解析:如果写成if(3<a<10),因为关系表达式的值只有0和1,这里a给成多少,3<a要么是0,要么是1,而0和1是小于10的,永远为真。

4. 运算符的优先级

说明:同一优先级的运算符,运算次序由结合方向所决定。

简单记就是:! > 算数运算符 > 关系运算符 > && > || > 赋值运算符。

第二节:逻辑运算符与赋值运算符

1. 逻辑运算符与逻辑表达式

非:!

与:&&

或:||

和数学上的与或非一致。

逻辑非的优先级高于算数运算符,逻辑与和逻辑或的优先级低于关系运算符

对0取非,得到的值为1,对非0值取非,得到的值为0。

逻辑与短路运算是当前面一个表达式为假时,后面的表达式不会执行。逻辑或短路运算是当前面一个表达式为真时,后面的表达式不会执行

#include <stdio.h>

int main() {
    int i=0,j=1;
    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");
        }
    }
    i=!!j;
    printf("i=%d\n",i);
    return 0;
}
F:\Computer\Project\practice\3\3.3-leap_year\cmake-build-debug\3_3_leap_year.exe
2000
i is leap year
1000
i is not leap year
m
i=1

进程已结束,退出代码为 0

解析:最后输入了非零的m,第一步!j为0,而后!!j为1。

#include <stdio.h>

int main() {
    int i=0;
    i&& printf("you can not see me\n");
    return 0;
}
F:\Computer\Project\practice\3\3.3-short_circuit\cmake-build-debug\3_3_short_circuit.exe

进程已结束,退出代码为 0

解析:没有任何输出,因为i=0就是假,不执行后面的了,短路。

2. 赋值运算符

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

a=b+25; 是合法的。

b+25=a; 是不合法的。因为b+25并未标识一个特定的位置(并不对应特定的内存空间)。

#include <stdio.h>

int main() {
    int a=1,b=2;
    b+25=a;
    return 0;
}
F:\Computer\Project\practice\3\3.3-logic\main.c:5:9: error: lvalue required as left operand of assignment
     b+25=a;
         ^

符合赋值运算符:

例如:

i=i+5可以写成i+=5;

i=i*5可以写成i*=5;

#include <stdio.h>
// 加后赋值和乘后赋值
int main() {
    int iNum,iResult;
    iNum=10;
    iResult=3;
    iNum+=5;
    iResult*=iNum;
    printf("iNun=%d\n",iNum);
    printf("iResult=%d\n",iResult);
    return 0;
}
F:\Computer\Project\practice\3\3.3-reunite_with\cmake-build-debug\3_3_reunite_with.exe
iNun=15
iResult=45

进程已结束,退出代码为 0
3. 求字节运算符sizeof

用于求常量或变量所占用的空间大小。

#include <stdio.h>

int main() {
    int i=0;
    printf("i sizeof is %d\n",sizeof(i));
    return 0;
}
F:\Computer\Project\practice\3\3.2-sizeof\cmake-build-debug\3_2_sizeof.exe
i sizeof is 4

进程已结束,退出代码为 0

可以看出整型变量占用空间大小为4个字节。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

傻啦猫@_@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值