运算符和表达式

运算符:运算符用于执行程序代码运算,会针对一个以上操作数来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”

操作数:是运算符作用于的实体,操作数指出指令执行的操作所需要数据的来源。

表达式:是由数字、运算符、数字分组符号(括号)、自由变量等以能求得数值的有意义排列方法所得的组合。

表达式书写规则

1,运算符不能相邻。例a+-b是错误的

2,乘号不能省略。列x乘以y,应写成x*y,而不是xy

3,可用多层括号表示运算次序,括号必须成对出现,均使用小括号。

运算符优先级和结合性

所谓优先级就是当一个表达式中有多个运算符时,先计算谁,后计算谁。这个其实我们在小学学算术的时候就学过,如1+4÷2

那么“结合性”是什么呢?优先级都是关于优先级不同的运算符参与运算时先计算谁后计算谁。但是如果运算符的优先级相同,那么先计算谁后计算谁呢?这个就是由“结合性”决定的。

比如1+2×3÷4,乘和除的优先级相同,但是计算的时候是从左往右,即先计算乘再计算除,所以乘和除的结合性就是从左往右。就是这么简单!

运算符分类

按所需操作数分类:

单目运算符

双目运算符

三目运算符

按作用分类:

算术运算符

单目正负不会改变操作数的值。 int num = 10;

-num;//表达式的值为-10 num还是为10

整数相除会向下取整。 5/2 == 2

5/2.0 == 2.5

取模运算只针对整数。 5%2 == 1

5.2%2//语法错误

赋值运算符

将一个数据(常量或表达式)赋值给一个变量。 int age =18;

age +=2;//age = age +2;

age +=5-3;//age = age+(5-3);

关系运算符

关系表达式的值只有2种,为真(true)返回1,为假(false)返回0。

所谓关系运算,就是做比较,日常生活中经常遇到一些真假判断,比如说,“张三比李四高”、“济南到北京比济南到上海近”,“5大于2”这些问题的答案是真或假。程序设计是对实际问题解决过程的模拟,常常需要做判断,像“如果这样,我就执行动作A,如果那样,我就执行动作B”,那怎么判断这样那样呢,就需要关系运算符和关系表达式。

逻辑运算符

逻辑表达式的值只有2种,为真(true)返回1,为假(false)返回0。

一般用来连接关系表达式。

短路现象

在由&&和||运算符组成的逻辑表达式中,C语言有个“节省计算”原则,当计算出一个子表达式的值后便可确定整个逻辑表达式的值时,后面的子表达式就不需要再计算了,这种表达式也称为短路表达式。

举个例子:

false&& printf("1\n");

true&& printf("2\n");

false|| printf("3\n");

true|| printf("4\n");

//output:2

// 3

对于&&符号,如果左边表达式为false,则右边表达式不会执行,即不会执行printf(“1”),如果左边表达式为true,则右边表达式会执行,即会执行printf(“2”),输出2

对于||符号,如果左边为true,则右边表达式不会执行,即不会执行printf("4"),如果左边表达式为false,则右边表达式会执行,即执行printf("3"),输出3。

特殊运算符

特殊算术运算符

对变量进行+1和-1的操作。

只能对变量使用,不能用于常量和表达式

前置时是先运算、后使用

后置时是先使用、后运算

注意:不要嵌套使用

inta = 1;

printf("%d", (a++ + ++a));  //1 + 3

逗号运算符

用逗号将多个表达式连接起来,又称为“顺序求值运算符”。整个表达式的值是最后那个逗号之后表达式的值。

逗号表达式两种作用:

分割: int a,b,c,d;

求值: int a = (1,3,5,7,9);

int b = 1,3,5,7,9;

条件表达式

条件表达式可以对指定的条件进行判断,true和false分别执行不同的代码。

条件 ?表达式1 :表达式2

printf(5 > 0 ?"正数":"负数");

printf((5 > 0) ? ("正数") : ("负数"));//为了避免眼花缭乱,可以把每个表达式都加上圆括号

位运算符

位运算只针对整型和字符型,而且是直接对二进制进行操作

按位与&

这个符号其实和逻辑与运算 && 意思一样,只不过作用在每一位上。

有0则0:对于每一位来说,两个数都是真,则为真,否则为假。

3-> 0b 0000 0011

2-> 0b 0000 0010

3&2 ->0b 0000 0010

按位或|

同理,和逻辑或运算 || 意思一样,只不过作用在每一位上。

有1则1:对于每一位来说,但凡有个真的就是真,否则为假。

3-> 0b 0000 0011

2-> 0b 0000 0010

3|2 ->0b 0000 0011

按位异或^

相同为0,不同为1:对于每一位来说,只要相同就为0,不同就为1。

3-> 0b 0000 0011

2-> 0b 0000 0010

3^2 ->0b 0000 0001

按位取反

取反是一个单目运算符,对每一位进行取反,即0变1,1变0

6-> 0b 0000 0110

~6-> 0b 1111 1001    //补码:最高位变成了符号位,所以结果肯定是一个负数

0b 1000 0110 //反码

0b 1000 0111 //原码

result: -7

左移

左移操作就是把这些0啊1啊的整体往左移动 n 位,右边缺的就补充 0。

3-> 0b 0000 0011

3<<1 -> 0b 0000 0110 ==6

2-> 0b 0000 0010

2<<2 0b 0000 1000 == 8

诶,大家发现没有,左移 1 位之后这个数相当于乘2。

但是这只适用于左边溢出的高位中不包含 1 时。

如果把 1 扔了,那就肯定不是 2 倍了嘛。

右移

右移操作就是整体往右移动 n 位,左边缺的补充符号位。

3-> 0b 0000 0011

3>>1 -> 0b 0000 0001 ==1

2-> 0b 0000 0010

2<<2 0b 0000 0001 == 1

同理,正数右移操作的效果是这个数除以 2。

最后

好了,C语言运算符和表达式就介绍到这里,大家可以先练习一下,后面介绍复杂的示例。

【编辑推荐】

【责任编辑:姜华 TEL:(010)68476606】

点赞 0

c语言中短路逻辑有与有或例子,C语言零基础教程之运算符和表达式,全面解析,轻松上手...相关推荐

  1. java 与或_Java 语言中的逻辑与 () 和逻辑或 (||) 运算采用 方式进行运算。_学小易找答案...

    [单选题]明清时期,"龙门账"按经济业务性质进行分门别类的登记在账簿"进"."缴"."存"和"()" ...

  2. C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解

    这里写目录标题 C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解 开篇语 函数的调用(嵌套调用和链式访问) 1.嵌套调用 2.函数的链式访问 函数的声明和定义 函数声明和定义分 ...

  3. c语言浮点变量是什么意思,C语言中说的浮点型是什么意思呢 C语言的浮点数是什么...

    导航:网站首页 > C语言中说的浮点型是什么意思呢 C语言的浮点数是什么 C语言中说的浮点型是什么意思呢 C语言的浮点数是什么 相关问题: 匿名网友: 就是这个数就像有一个飘动的小数点,也就是我 ...

  4. C语言中的结构体定义和使用例子

    C语言中的结构体定义和使用例子 一.结构体定义的三种方式 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对 问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共 ...

  5. %3c- r语言运算符,R语言基础教程之运算符

    原标题:R语言基础教程之运算符 运算符类型 在R编程中有以下类型的运算符 - 算术运算符 关系运算符 逻辑运算符 赋值运算符 其他运算符1.算术运算符 下表显示了R语言支持的算术运算符.运算符对向量的 ...

  6. C语言零基础入门级数据类型+运算符+控制流+ASCII 码表+面试题【系统学习第二天】

    C语言零基础入门级数据类型+运算符+控制流 第一项 C语言->数据类型全讲解上 [1]整型int [2]整型修饰符short.long.unsigned [3]符号位 [4]格式控制符%d+%h ...

  7. 二级考试c语言中 星号与字母 题型总结,计算机等级C语言上机考试编程题分类总结.doc...

    计算机等级C语言上机考试题分总结 (一).数学题目:5.6.11.14.34.48.49 编程的题目中,如果是数学题目,编程时用到阶乘或者是奇数项的积,则首先给变量赋初值为1,不能赋初值为0,同时把变 ...

  8. c语言中很多中括号由外向里,浅谈C语言中的类型声明

    文章目录 [隐藏] 新年第一更!之前群友问了一个 C语言 问题,即int(*(*p)()).int *(*p)()和int *(*p())的区别在哪里.确实,有时C语言的类型声明是很魔性的,看着也很令 ...

  9. c语言中的文件类型只有文本文件一种,C语言中的文件类型只有哪两种_后端开发...

    pycharm能干嘛_后端开发 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示 ...

最新文章

  1. Linux下修改PATH环境变量
  2. python制作生日祝福_【中信项目案例分享】python 实现自动生成个性化生日贺卡...
  3. X86服务器虚拟化的资源划分和性能优化
  4. node.jsv12.16.3正式版
  5. JVM(HotSpot) 垃圾收集器
  6. Docker安装Redis(docker-compose.yml)
  7. Python 爬取 3 万条游戏评分数据,原来程序员最爱玩的游戏竟然是......
  8. 揭秘百万人围观的Facebook视频直播
  9. 华为认证高级网络工程师(Huawei Certified Senior Network Engineer HCSE)
  10. java定时器定时发短信,定时任务(如:定时发送短信信箱等)
  11. (个人理解+转载)ANSI/ASCII/UTF8/UNICODE/GB2312/UCS-2/UTF16-文本的编码格式
  12. 服务器上的光信号出现红点怎么办,光纤猫光信号闪红灯无法上网怎么办
  13. 【面试】google电面等
  14. 160_zigbee协调器_一种判断数据包有没有拿对的方法【掐头去尾发,拿头指针、尾指针去判断】
  15. 2021-11-15 入门前端VScode必装的常用插件, HTML+CSS常用属性速记.
  16. 蒙特梭利素材-【数字海报】蒙氏素材
  17. C语言中的%d、%u、%p、%f、%lu...
  18. 9.27通则康威技术面
  19. 计算机辅助设计软件应用答案,专科《计算机辅助设计软件地应用》_试卷_答案.docx...
  20. 「掘虫者说」The timestamp difference between admin and executor exceeds the limit

热门文章

  1. python安装第三方扩展包_【Python】pip - 安装第三方包的神器
  2. Python多线程好文
  3. libcareplus一个Qemu-6.1.0热补丁示例
  4. Linux内存管理:知识点总结(ARM64)
  5. Linux内核 eBPF基础:kprobe原理源码分析:源码分析
  6. Linux内核深入理解定时器和时间管理(4):定时器 timer
  7. 深度 || 既然C编译器是C语言写的,那么第一个C编译器是怎样来的?
  8. 照片转3d模型_三星使用AI将照片转换为3D模型
  9. centos升级内核 大漠知秋_记一次centos 7内核升级事故
  10. count函数_计数函数Count、Counta、Countblank、Countif、Countifs技巧解读