运算符与表达式——培训记录

0.引入

1.计算机通过计算去解决问题的。

Q:这个计算到底是按照什么方式去进行计算的?

A:通过各种运算符去进行计算。 --->运算符与表达式

1.运算符

1.运算符:用来进行某种运算的符号。如: + - * / %

2.几目运算符:表示该运算符需要几个操作数才能完成运算。

        分类:     (1)单目运算符:该运算只需要带一个操作数,如:++ -- ,a++。

                        (2)双目运算符:该运算需要带两个操作数,如+ - * \

                        (3)三目运算符:该运算需要带三个操作数,如:   ? :

3.结合性:决定谁先进行计算的问题。1.从左至右        2.从右至左        3.优先级

4.优先级:在一个含有多个运算符的表达式中,先计算哪一个运算符,后计算哪个运算符的问题就是优先级的问题。

单目运算符>算术运算符>关系运算符>逻辑运算符>条件运算符>赋值运算符>逗号运算符。

1.1算术运算符

1.1.1.单目运算符:++ --要求操作数必须为一个左值。

1、++: 自增运算符
        i++
        ++i

2、--: 自减运算符
        i--
        --i

表达式表达式的值执行表达式后i的值
i++ii+1
++ii+1i+1
i--ii-1
--ii-1i-1

总结:前置++i,先自加1,然后再进行使用。后置i++,先计算,然后再进行加1。

           前置--i,先自减1,然后再进行使用。后置i--,先计算,然后再进行减1。

1.1.2.双目运算符:+ - *  / %结合性从左至右

特别说明: %取余运算符。在C语言中,%要求两个操作数都为整数,并且不能对0进行取余。

有负数进行取余运算时,取负数的绝对值进行运算,求出余数之后再给余数加上被除数的符号

eg: (-10) % (-4)    //-2   //-(10%4)

1.2关系运算符

1.关系运算符:< > <= >= != ==        用来判断两个操作数的关系。 “关系”:数值大小的关系。

2.关系运算符:双目运算符,结合性从左至右。

3.关系表达式:用关系运算符连接的式子。

4.关系表达式的值:0,关系不成立。非0,关系成立。

1.3逻辑运算符

1.逻辑运算符:

逻辑运算符
符号意义几目运算符含义结合性
逻辑非单目运算符“取反”
&&逻辑与双目运算符“并且”从左至右
||逻辑或双目运算符“或者”从左至右

2.逻辑与&&:当两个操作数都为真,结果才会为真,否则就为假。
逻辑或||:当两个操作数都为假,结果才会为假,否则就为真。
逻辑非!:如果操作数是真的,结果为假,如果操作数是假的,结果为真。

3.逻辑表达式:用逻辑运算符连接起来的式子。

4.逻辑表达式的值:
        用非0表示逻辑真,逻辑表达式如果为真,它的值为1.
        用0表示逻辑假,逻辑表达式如果为假,它的值为0.

5.C语言运算符“惰性运算”

eg:a&&b&&c
        如果a为假,表达式的值一定是假的,不管b,c。
        如果a为真,才需要判断b的值。
        如果a和b都为真,才需要判断c的值。

        a||b||c
        如果a为真,整个表达式的值一定为真,不会计算表达式b,c。
        只有a为假,才需要判断b的值。
        只有a和b都为假,才需要判断c的值。

注意:计算表达式的时候,先判断各个运算符的优先级,再按照结合性进行运算。同时还要注意惰性运算。

1.4位运算符

1.位运算符是指以bit位为单位来进行运算。

        位运算符要求操作数都是整数。

        所有的位运算都是把操作数变成bit位序列,再按照bit位进行运算。

位运算符
符号含义
&按位与
|按位或
^按位异或
~按位取反
<<按位左移
>>按位右移

除了按位取反~是一个单目运算符,其它运算符都是双目运算符。

2.~按位取反
    1->0
    0->1

eg:        int a = ~5;
        5:0000 0000 0000 0000 0000 0000 0000 0101
      ~5:1111 1111   1111  1111  1111 1111  1111 1010

3.按位与&:双目运算符。

aba&b
000
100
010
111

&只有当两个操作数都为1时,其结果才能为1,否则为0。

注意:一个 bit位 按位与1操作之后,保留原值。一个bit位,按位与0操作之后,结果为0。

4.按位或 | ,双目运算符,结合性从左至右。

aba|b
000
101
011
111

按位或,只要有一个操作数为1,结果为1,全部为0,结果为0。

注意:一个bit | 0,“按位或”操作,保留原值。一个bit | 1,“按位或”操作,结果为1。

5.按位异或^,双目运算符,结合性从左至右。相同为0,不同为1。

aba^b
000
101
011
110

注意:一个bit和0进行“异或”操作,结果保留原值。一个bit和1进行“异或”操作,结果取反。

6.按位左移<<  ,双目运算符,结合性从左至右。a<<n 把a的bit为整体左移n位
        运算时,先转换成二进制运算,n不需要转换成二进制的(n为整数)。
        高位左移后,丢弃,低位会空出n位,直接补0。
        如果左移舍弃的高位全部都是0,左移n为后,就表示原值乘以2^n。

7.按位右移 >> ,双目运算符,结合性从左至右。x>>n 把x按bit位整体右移n位。
        运算时,先需要把x转换成二进制补码,n不需要换算(n为整数)。
        低位右移后,直接丢弃。
        此时高位会空出n位,n位补什么?
                对于无符号的数,高位直接全部补0.
                对于有符号的数,高位补符号位。
        
8. “逻辑右移”:
            无符号的概念,逻辑左移还是右移,都是补0.
    “算术右移”:
            有符号的概念,算术右移,高位补符号位。
C语言中,并没有规定是逻辑右移还是算术右移,在不同的编译器实现C语言的右移的时候,可能得到结果不一样。

1.5赋值运算符

1.= :双面运算符,结合性从右到左。

eg:        a = b
        把表达式b的值,赋值给a,
        赋值运算符要求左边的操作数必须是一个“可写的地址”(左值)。

2.赋值表达式:由赋值运算符连接起来的式子。

3.赋值表达式的值就是最后赋值给左边那个变量的值。

4.复合赋值表达式:
        += : a+=5 ---> a = a+5
        -= : a-=5 ---> a = a-5
        %= 、 /= 、 <<=.....

1.6条件运算符

1.?: 条件运算符,三目运算符,结合性从右到左。该运算符需要三个操作数。该运算符也有可能惰性运算。

2.语法:expression?a:b

        expression:条件
                如果expression为真,整个表达式的值为a,
                如果expression为假,整个表达式的值为b。

1.7逗号运算符

1.逗号运算符:双目运算符,优先级是最低的,结合性从左到右。

2.语法:表达式1,表达式2,表达式3,.....表达式n

        逗号表达式的求值顺序:先求表达式1的值,然后再求表达式的值....整个逗号表达式的值就是表达式n的值。
 

1.8指针运算符

*指向运算符        & 取地址符

1.9求字节运算符

sizeof(x)       求x所占字节数。

1.10分量运算符

求结构体成员变量。
    .
    ->

1.11下标运算符

int a[10];
    0~9
数组下标从0开始。
        访问数组成员:
                数组名[数组元素下标];        a[0] a[1]

1.12强制转换运算符

语法:(数据类型)

eg:(unsigned char)-1;

2.表达式

表达式是用运算符连接起来的式子。

3.运算符优先级和结合性

运算符结合性优先级
( )  [ ]  ->    从左到右
++  --  !  ~  +正号 -符号从右至左
*  &  sizeof( )  typeof( )从左至右
*  /  %从左至右
+加   -减从左至右
<<    >>从左至右
<    <=    >   >=从左至右
==    !=从左至右
&按位与从左至右
|按位或从左至右
^按位异或从左至右
&&从左至右
||从左至右
?:从右至左
= += -= *= ...从右至左
,从左至右

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排查bug的通用思路

⭐️前言⭐️ APP点击某个按钮没有反应/PC端执行某个操作后&#xff0c;响应较慢&#xff0c;通用的问题排查方法: 从多个角度来排查问题 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评…

AI 建站:Durable

网址&#xff1a;https://app.durable.co 步骤 1) 登录 2&#xff09;点击创建新业务 3&#xff09;填写信息后&#xff0c;点击创建 4&#xff09;进入业务 5&#xff09;生成网站 6&#xff09;生成完成后不满意的话可以自己调整 7&#xff09;点击保存 8&#xff09;发布 …

部署kafka并通过python操作

目录 一、安装JDK1.81、检查服务器是否已安装JDK2、若已安装JDK&#xff0c;进行卸载3、更新yum源4、搜索JDK1.8安装包5、安装JDK1.86、查看是否安装成功7、配置环境变量 二、安装Kafka1、下载并解压kafka部署包至/usr/local/目录2、修改server.properties3、修改/etc/profile4…

【Linux】 进程池 一主多从 管道通信

目录 1.代码介绍 2.channel 类 3.进程池类编写 4.主函数及其他 5. 源码 1.代码介绍 本文代码采用一主多从式&#xff08;一个主进程&#xff08;master&#xff09;多个子进程&#xff08;worker&#xff09;&#xff09;通过管道进行通信&#xff0c;实现主进程分发任务&…

Ubuntu环境安装RabbitMQ

1.安装Erlang RabbitMq需要Erlang语⾔的⽀持&#xff0c;在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 : erl 退出命令:halt(). 2. 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 …

集合框架(3)Map

Map接口 现实生活与开发中&#xff0c;我们常会看到这样的一类集合&#xff1a;用户ID与账户信息、学生姓名与考试成绩、IP地址与主机名等&#xff0c;这种一一对应的关系&#xff0c;就称作映射。Java提供了专门的集合框架用来存储这种映射关系的对象&#xff0c;即java.util…

力扣--199.二叉树的右视图

题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 提示: 二叉树的节点个数的范围是 [0,100] -100 < Node.val < 100 代码 class Solution { public List rightSideV…

Ubuntu Server 22.04.5 LTS重启后IP被重置问题

Ubuntu Server 22.04.5 LTS重启后IP被重置问题 最近在使用Ubuntu Server 22.04做项目开发测试时发现每次重启和关机后&#xff0c;所设置的静态IP地址都会回复到安装系统时所设置的ip Ubuntu Server 22.04 官网下载地址&#xff1a;Ubuntu官方下载地址 对虚拟机下安装Ubuntu感…

Python+OpenCV系列:Python和OpenCV的结合和发展

PythonOpenCV系列&#xff1a;Python和OpenCV的结合和发展 **引言****Python语言的发展****1.1 Python的诞生与发展****1.2 Python的核心特性与优势****1.3 Python的应用领域** **OpenCV的发展****2.1 OpenCV的起源与发展****2.2 OpenCV的功能特性****2.3 OpenCV的应用场景** *…

kube-proxy的iptables工作模式分析

系列文章目录 iptables基础知识 文章目录 系列文章目录前言一、kube-proxy介绍1、kube-proxy三种工作模式2、iptables中k8s相关的链 二、kube-proxy的iptables模式剖析1.集群内部通过clusterIP访问到pod的流程1.1.流程分析 2.从外部访问内部service clusterIP后端pod的流程2.1…

CSMM 软件能力成熟度评估认证补贴政策汇总!

CSMM认证&#xff0c;全称为“软件能力成熟度评估”&#xff0c;也被称作“中国版CMMI认证”。这是中国自主制定的软件能力成熟度评估标准&#xff0c;于2021年6月8日发布。该标准由中国电子技术标准化研究院联合多家产学研用相关单位制定&#xff0c;旨在适合中国国情以及中国…

华为网络设备配置文件备份与恢复(上传、下载、导出,导入)

在日常运维工作中&#xff0c;会经常存在网络割接的情况&#xff0c;为了保证网络割接失败时能重新回退至原有配置&#xff0c;从而不影响原有的办公环境&#xff0c;在网络割接前的备份工作就非常有必要了。 备份方式&#xff1a;FTP 备份技术&#xff1a;PC客户端<---&g…

Linux HTTP代理Squid 基本变更配置及目标白名单方式限制转发

1、文件管理转发白名单 sudo touch /etc/squid/whitelistip sudo touch /etc/squid/whitelistdomain # 目的地ip地址 acl whitelistip dst "/etc/squid/whitelistip" http_access allow whitelistip# 目的地域名限制&#xff0c;可使用.xxx.com 放开整个子域名 acl…

清风数学建模学习笔记——Topsis法

数模评价类&#xff08;2&#xff09;——Topsis法 概述 Topsis:Technique for Order Preference by Similarity to Ideal Solution 也称优劣解距离法&#xff0c;该方法的基本思想是&#xff0c;通过计算每个备选方案与理想解和负理想解之间的距离&#xff0c;从而评估每个…

[软件工程]九.可依赖系统(Dependable Systems)

9.1什么是系统的可靠性&#xff08;reliability&#xff09; 系统的可靠性反映了用户对系统的信任程度。它反映了用户对其能够按照预期运行且正常使用中不会失效的信心程度。 9.2什么是可依赖性&#xff08;dependablity&#xff09;的目的 其目的是覆盖系统的可用性&#x…

减少30%人工处理时间,AI OCR与表格识别助力医疗化验单快速处理

在医疗行业&#xff0c;化验单作为重要的诊断依据和数据来源&#xff0c;涉及大量的文字和表格信息&#xff0c;传统的手工输入和数据处理方式不仅繁琐&#xff0c;而且容易出错&#xff0c;给医院的运营效率和数据准确性带来较大挑战。随着人工智能技术的快速发展&#xff0c;…

Jackson使用实例:将后端返回的 JSON 字段名转换为大写(多种方案详细实例实现)

目录 将返回 JSON 字段名转换为大写背景解决方案1. **局部字段名转换为大写** — 使用 JsonNaming 注解方案概述步骤 2. **全局字段名转换为大写** — 配置 ObjectMapper方案概述步骤 3. **手动指定字段名称** — 使用 JsonProperty 注解方案概述步骤 4. **总结**推荐方案 将返…

汽车一键启动开关 、一键启动按键 、一键启动按钮

‌汽车一键启动按钮是智能汽车的重要部分&#xff0c;通常用于启动和关闭引擎‌。 ‌具体功能‌&#xff1a; ‌启动引擎‌&#xff1a;在许多现代汽车中&#xff0c;一键启动按键取代了传统的钥匙启动方式。只需轻轻按下一键启动按钮&#xff0c;车辆电源即被接通&#xff0c…

.NET用C#导入Excel数据到数据库

将Excel文件中的数据导入到数据库中不仅能够提升数据处理的效率和准确性&#xff0c;还能极大地促进数据分析和决策制定的过程。尤其在企业级应用中&#xff0c;Excel作为数据输入和初步整理的工具非常普遍&#xff0c;但其功能对于复杂查询、大规模数据管理和跨部门的数据共享…

python中数组怎么转换为字符串

1、数组转字符串 #方法1 arr [a,b] str1 .join(arr)#方法2 arr [1,2,3] #str .join(str(i) for i in arr)#此处str命名与str函数冲突&#xff01; str2 .join(str(i) for i in arr) 2、字符串转数组 #方法一 str_x avfg st_list list(str_x) #使用list()#方法二 list_s…