表达式基础

文章目录

  • 1、表达式组成
    • 1、运算符
  • 2、表达式的分类
    • 1、算数运算符
      • 1、自增运算符和自减运算
      • 2、取余运算(%)
      • 3、除法运算(/)
      • 4、案例
    • 2、关系运算符
    • 3、逻辑运算符
    • 4、条件运算符(三目运算符)
      • 1、案例
    • 5、赋值运算(=)
      • 1、赋值类型转换
      • 2、复合赋值运算
    • 6、逗号运算
    • 7、取地址运算(&)
    • 8、计算变量占用几个字节(sizeof)
    • 9、位运算(二进制运算)
      • 1、按位取反
      • 2、按位与运算(&)
      • 3、按位或运算(|)
      • 4、按位异或运算(^)
      • 5、左移位运算(<<)
      • 6、右移位运算(>>)
  • 3、运算的优先级与结合性

1、表达式组成

1、运算符

  • 根据运算符的操作个数分为单目,双目,三目

  • a++ 单目运算

  • a+b 双目运算

  • ?表1;表2 三目运算

img

2、表达式的分类

1、算数运算符

img

1、自增运算符和自减运算

  • a++ ++a,自增1

  • ++i 先增加1,然后再使用

  • i++ 先使用i的值,然后增加+1,先用,后使用

  • 跟的是一个变量,不能是表达式,常量

  • –i,++i都用完之后才能加,也就是语句

#include<stdio.h>
void main()
{int a = 1 ,b=2,c;c = ++a*b;printf("%d,%d",c,a);
}# tc版本
# 扫描整个表达式 ,i=1
(++i)+(++i)+(++i)# 所以i=4 ,结果为3*4 = 12# vc版本# 只能先算后面2个表达式# i =  3  3+3+(++i) = 6+4=10# 编译器的不同
#include<stdio.h>
void main()
{int i,j;i=j=5;printf("i++=%d,j--=%d\n",i++,j--);printf("++i=%d,++j=%d\n",++i,--j);printf("i++=%d,j--=%d\n",i++,j--);printf("++i=%d,++j=%d\n",++i,--j);printf("i=%d,j=%d\n",i,j);
}

2、取余运算(%)

  • %要求参与运算的2个量必须是整型,不能有实型(小数),实型数据不能做%运算

  • 可以判断是不是偶数

  • 正负号取决于被除数

  • 5%(-2) = 1 ,(-5)%2 = -1

  • 0取余任何数据结果都为0

int a = 10,b;
b = a%3;  # %的优先级高于= ,先算右边的,= 的结合性自右向左的,赋值给b
printf("%d",b);

3、除法运算(/)

  • 如果有小数参与,得到的就是小数

  • 如果均为整数参与运算,得到的就是整数

4、案例

3.5+1/2+56%10345取出个位,十位,百分位

2、关系运算符

  • 也就是条件运算

  • 关系运算符,低于算数运算符,高于逻辑运算

  • 1代表的真,0代表的为假

5 > 3 的结果为真,值为13<7<5# 先算从往右算,1<5成立,为真,1

3、逻辑运算符

  • 非0代表真,0代表假

  • && 逻辑与,2边都为真,就为真

  • || 逻辑或,有一个为真,则为真

  • !逻辑非 为真结果就为假,运算的优先级高于上面的&&,|| ,因为是单目运算符

  • !>&&>|| 低于关系运算符,高于赋值运算符

  • && 只要表达式的值能够确定,就不在计算下去了

  • || 可以确定整个表达式的值为假时,剩下的表达式部分边不在计算

#include<stdio.h>
void main()
{int a=3,b=5,c=7,d;d = a >5&&b--||c++;printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);}# 3581
# 如果能确定值的话,剩下的表达式就不用算了
  • 逻辑表达式描述条件
# x是3的倍数x%3==0# x是偶数x%2==0# x是3的倍数并且是偶数(x%3==0)&&(x%2==0)# 三位数x是回文数,121,首尾相等x/100 == x%10# abc为三边,构成等边三角形(a==b)&&(b==c)# 某年是闰年
# 能够被4整除,并且不能被100整除或者可以被400整除((year%4==0)&&(year%100!=0))||(year%400==0)#include<stdio.h>
void main()
{int x,y,z,t;x=y=z=1;t = ++x||++y&&++z;printf("x=%d,y=%d,z=%d,t=%d",x,y,z,t);	
}# 先算++x 为真 ,||后面的就不用算了,短路的特性# 因为·单目运算符的优先级高于|| ,所以的话,先算出++x > 0 ,因此后面就不用算了

4、条件运算符(三目运算符)

  • ?和;组成

  • 三目运算符

  • 表达式1?表达式2:表达式3

  • 表达式1为真执行表达式2,否则执行表达式3

  • 表达式1必须是判断的,有一个真假的值

  • 条件运算,优先级高于赋值运算和逗号运算

  • 从右往左算

a>b?a:c>d?c:d# 先算右边的再算左边的
a>b?a:(c>d?c:d)

1、案例

  • 比较2个数的谁打谁小
a?a:b# 如果a>b输出a# 如果a<b输出b 这个就是求出了最大值
  • 求a的绝对值
a>0?a:-a# 如果a>0,就输出a# 如果a<=0,就输出-a,也就是绝对值
  • 输入一个字母,以小写的形式输出
# 'A'和'Z'之间的范围,就是大写字母
#include<stdio.h>
void main()
{char ch;scanf("%c",&ch);ch = (65<=ch<97)?ch+32:ch;printf("%c",ch);
}

5、赋值运算(=)

  • 右结合性,算右边的

  • = 左边的操作数只能是变量

1、赋值类型转换

  • 实型数据赋给整型,舍弃小数部分,不是四舍五入

  • 将整型数据赋给单双精度时,数值大小不变,以浮点形式存储

  • 字符型数据赋值给整型变量时,由于字符只占一个字节,整形占2个字节,因此字符型数据放在整型变量的低8位中,这样数据就不会发生改变了,高八位补0即可

  • 基本整形数据赋给长整型变量时,基本整形数据放在长整型变量低16位中,反之长整型赋给基本整形变量时,只将长整型数据的低16位送给基本整形变量,正数用0补全,负数用1来补全

img

2、复合赋值运算

  • +=,-=,*=,/= %=

  • 变量❤ = 表达式 = 等价于 变量=变量❤表达式

#include<stdio.h>
void main()
{int a = 3;a+=a*=a+1;printf("%d",a);
}# 右结合性

6、逗号运算

  • 优先级是最低的

  • 从左往右算

  • 表达式1,表达式2,表达式3,表达式n 表达式n就是最终的结果

  • 自增和自减遇到逗号立刻完成

  • 赋值运算高于逗号运算

x=a=3,6*x,6*a,a+x# 最后的结果为6,a与x的结果没有变x=3,x++,x+2;# x++,这个时候x=4,表达式最后的结果为6
# x的值为4

7、取地址运算(&)

  • 变量存储在内存中,这个&就能求出这个地址

8、计算变量占用几个字节(sizeof)

#include<stdio.h>
void main()
{printf("%d\n",sizeof(char)); # 占一个字节printf("%d\n",sizeof("qwer")); # 输出5个字节,\0
}

9、位运算(二进制运算)

1、按位取反

  • 运算符 ~

  • 右结合性

  • 将一个二进制按位取反,0变1,1变0

~25
0000000000011001 # 25的二进制1111111111100110 # ~25 先按位取反1000000000011001 # 取反码1000000000011010 # ~25的补码 按位取反后为-26

2、按位与运算(&)

  • 都是1就是1,有0就是假

  • 1&任何数 都是那个数

0x29&0x37
00101001 
0011011100100001 # 得到的结果为0x21

3、按位或运算(|)

  • 有一个1就是真

4、按位异或运算(^)

  • 相同为0,不同为1

5、左移位运算(<<)

  • 对左边的操作进行移位,右边操作数是移动的位数

  • 左移的话相当于乘以2^n

  • 空出的为补0

15<<2
1111
111100 # 移动之后的为60

6、右移位运算(>>)

  • 除以2^n取整
15>>2
1111
11.11 # 后面的11被舍弃了为3

3、运算的优先级与结合性

  • * 是指针运算符,就是单目的

  • 如果是乘号,就是双目运算符

img

  • 单目运算符和赋值运算符,从右到左

  • 大多数都是从左往右进行计算

  • 从左往右看2个运算符,比较几个运算符的优先级

  • 当前面的高于后面的,直接算前面一个

  • 当后面高于前面的,继续向后比较

  • 真就是1,假就是0,看的是结果

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

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

相关文章

除了合并接口,还有哪些优化 Flask API 的方法?

除了合并接口&#xff0c;还有许多其他方法可以优化 Flask API&#xff0c;以下从性能优化、代码结构优化、安全性优化、错误处理优化等方面详细介绍&#xff1a; 性能优化 1. 使用缓存 内存缓存&#xff1a;可以使用 Flask-Caching 扩展来实现内存缓存&#xff0c;减少对数…

Web服务器配置

配置虚拟主机 通过虚拟主机&#xff0c;可以实现用自定义的域名来访问&#xff0c;并且可以为不同的域名指定不同的站点目录。 配置IP地址和域名的映射关系 申请真实的域名需要一定的费用&#xff0c;为了方便开发&#xff0c;可以通过修改hosts文件来实现将任意域名解析到本…

爬虫逆向实战小记——解决webpack实记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; aHR0cHM6Ly9wbW9zLnhqLnNnY2MuY29tLmNuOjIwMDgwL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi8jL3B4Zi1zZXR0bGVtZW5…

蓝桥杯 之 前缀和与查分

文章目录 题目求和棋盘挖矿 前缀和有利于快速求解 区间的和、异或值 、乘积等情况差分是前缀和的反操作 前缀和 一维前缀和&#xff1a; # 原始的数组num,下标从1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的区…

Windows10下本地搭建Manim环境

文章目录 1. 简介2. Python环境3. uv工具4. Latex软件5. 安装Manim数学库6. 中文支持参考 1. 简介 manim是个一科普动画的库&#xff0c; 本文用到的是社区版本。 2. Python环境 这个不用多说&#xff0c;可以参考其他的文章。记得把pip也安上。 3. uv工具 上面的pip是老…

#UVM# 关于field automation机制中的 pack_bytes 和unpack_bytes 函数剖析

一 pack_bytes 函数 在 UVM 中,pack_bytes 函数用于将类中的所有字段打包成一个字节流(byte stream)。这是 UVM 提供的字段自动化(field automation)机制的一部分,用于简化数据打包和传输。 extern function int pack_bytes(ref byte unsigned bytestream[], input uv…

YOLOv8 自定义目标检测

一、引言 YOLOv8 不仅支持预训练模型的推理&#xff0c;还允许用户将其应用于自定义对象检测。本文将详细介绍如何使用 YOLOv8 训练一个新的模型&#xff0c;并在自定义数据集上进行对象检测。 二、数据集准备 1. 数据集格式 YOLOv8 支持多种数据集格式&#xff0c;包括 CO…

关于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全称General Purpose Timer&#xff0c;就是个通用定时器&#xff0c;取的名字奇怪了点。定时器是一定要的&#xff0c;要么提供给BSW去使用&#xff0c;要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…

Dify 开源大语言模型应用开发平台使用(一)

文章目录 一、创建锂电池专业知识解答应用1.1 应用初始化 二、核心功能模块详解2.1 知识库构建2.2 工作流与节点编排节点类型说明工作流设计示例&#xff1a;锂电池选型咨询 2.3 变量管理 三、测试与调试3.1 单元测试3.2 压力测试3.3 安全验证 四、部署与优化建议4.1 部署配置4…

《Java基础 聊天窗口案例:剖析 GUI、文件 I/O 等关键技术知识》

1. 面向对象编程 类与对象&#xff1a;代码中定义了 Chat 类&#xff0c;它是整个程序的核心&#xff0c;封装了与聊天窗口相关的属性和方法。在 main 方法中创建了 Chat 类的对象&#xff0c;并调用其方法来完成相应的功能。继承与多态&#xff1a;ButtonClickListener 类实现…

IDE集成开发环境MyEclipse中安装SVN

打开Myeclipse的help菜单----install from site 点击add弹出对话框 在输入框中输入对应内容 http://subclipse.tigris.org/update_1.10.x 点击OK之后&#xff0c;会刷新出两个选项&#xff0c;需要选中的 点击next&#xff0c;出现许可的时候选中同意&#xff0c;一直结束等…

归并排序:分治哲学的完美演绎与时空平衡的艺术

引言&#xff1a;跨越世纪的算法明珠 在计算机科学的璀璨星河中&#xff0c;归并排序犹如一颗恒久闪耀的明星。1945年&#xff0c;现代计算机之父冯诺伊曼在EDVAC计算机的研发过程中首次系统性地提出了这一算法&#xff0c;其精妙的分治思想不仅奠定了现代排序算法的理论基础&…

服务器CPU微架构

1、微架构图 前端&#xff1a;预解码、解码、分支预测、L1指令缓存、指令TLB缓存 后端&#xff1a;顺序重排缓存器ROB处理依赖&#xff0c;调度器送到执行引擎 执行引擎&#xff1a;8路超标量&#xff0c;每一路可以进行独立的微操作处理 Port0、1、5、6支持整数、浮点数的加…

SpringBoot调用DeepSeek

引入依赖 <dependency><groupId>io.github.pig-mesh.ai</groupId><artifactId>deepseek-spring-boot-starter</artifactId><version>1.4.5</version> </dependency>配置 deepseek:api-key: sk-******base-url: https://api.…

【前端基础】Day 9 PC端品优购项目

目录 1. 品优购项目规划 1.1 网站制作流程 1.2 品优购项目整体介绍 1.3 学习目的 1.4 开发工具以及技术栈 1.5 项目搭建工作 1.6 网站favicon图标 1.7 网站TDK三大标签SEO优化 2. 品优购首页制作 2.1 常见模块类命名 2.2 快捷导航shortcut制作 2.3 header制作 2.4…

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中&#xff0c;忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程&#xff0c;该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…

NetBeans 8.2 开发 CIFLog3.5 - 创建WelcomeDemo

NetBeans 8.2 开发 CIFLog3.5 - 创建WelcomeDemo NetBeans 8.2 开发 CIFLog3.5 - 创建WelcomeDemo创建一个基于CIFLog平台的应用系统1. 下载安装CIFLog2. 授权使用3. 解决本地机器码验证错误问题4. 创建一个基于CIFLog平台的应用系统&#xff08;1&#xff09;新建项目&#xf…

ESP8266连接网络实时上传数据

要实现这个功能,可以按照以下步骤进行编程。我们将使用Arduino IDE来编写代码,并结合ESP8266的WiFi库、MQTT库以及Web服务器库来实现。 1. 准备工作 硬件:ESP8266开发板、温度传感器(如DS18B20)、显示屏(如OLED)。软件:Arduino IDE、ESP8266库、PubSubClient库(MQTT)…

pytest中pytest.ini文件的使用

pytest.ini 是 pytest 测试框架的配置文件,它允许你自定义 pytest 的行为。通过在 pytest.ini 中设置各种选项,可以改变测试用例的发现规则、输出格式、插件行为等。以下详细介绍 pytest.ini 文件的使用。 1. 文件位置 pytest.ini 文件通常位于项目的根目录下,pytest 在运…

MARL零样本协调之Fictitious Co-Play学习笔记

下列引用来自知乎作者Algernon 知乎link FCP作为ZSC领域两阶段训练方法的开创者 论文《Collaborating with Humans without Human Data》来自 NeurIPS 2021。这篇论文提出 Fictitious Co-Play (FCP) 来解决 ZSC 问题。论文认为&#xff0c;ZSC 的第一个重要问题是对称性&#x…