【初阶C语言】操作符2---表达式求值
前言:本节重点介绍操作符的使用,如,优先级高低、类型转换等
一、逻辑操作符
前言:逻辑操作符包括逻辑与(&&)和逻辑或(||),操作对象:两个
1.逻辑与(&&)
(1)定义
&&的字面意思就是并且。如:A&&B,需要A和B同时成立,整体才成立。
(2)图形解释

0表示假,所以需要A和B同时满足条件才会执行
2.逻辑或(||)
(1)定义
||的字面意思就是或者。如:A||B只需要其中一个成立,整体就会成立。
(2)图像解析

A||B只需要满足其中一个条件即可
3.&&与||的应用和细节
(1)应用1-----用于判断的条件
题目要求:0-17岁,输出未成年;18-30岁,输出青年;31-45岁,输出中年人……
#include<stdio.h>
int main()
{//0-17岁,输出未成年;18-30岁,输出青年;31-45岁,输出中年人……int age;scanf("%d",&age);if (age < 18)printf("未成年\n");else if (18 <= age && age <= 30)printf("成年人\n");else if (age >= 31 && age <= 45)printf("中年人\n");return 0;
}

(2)应用2---细节的把控
代码1:
#include<stdio.h>
int main()
{int i = 0, a = 0, b = 2, c = 3, d = 4;i = a++ && ++b && d++;printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);printf("%d\n",i);return 0;
}
运行结果:

第一步:a=0,就表示假的意思。
第二步:a++&&++b,因为a已经是假的,然后才a++,根据&&符号可知,已经不需要再执行b++语句就已经得出结论。
第三步:在&&条件中,只需要前面的条件为假,则不会再执行后面的语句;如果前面为真,才会接着判断后面的语句
修改代码:a=1
#include<stdio.h>
int main()
{int i = 0, a = 1, b = 2, c = 3, d = 4;i = a++ && ++b && d++;printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);printf("%d\n",i);return 0;
}
运行结果: 与刚才的结果大为不同

代码2:
#include<stdio.h>
int main()
{int i = 0, a = 0, b = 2, c = 3, d = 4;i = a++ || ++b || d++;//或者操作符printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);printf("%d\n",i);return 0;
}
运行结果:

第一步:执行a,左边为假,在a++,继续执行||右边的语句。
第二步:因为b的起始值≠0,所以为真,不再执行||右边的语句。此时整体的表达式都为真。
第三步:||操作符,左边为真时,不再执行右边的语句;当左边为假,才会继续执行或者判断右边的语句。
总结:
1.&&操作符,如果左边操作数为假,右边无需计算。
2.||操作符,如果左边操作数为真,右边无需计算。
表达式求值有三部分:隐式类型转换、算术转换和操作符的属性。
二、隐式类型转换
前言:这里介绍的一般就是整型提升的内容
1.整形提升的定义
(2)操作的对象是二进制的补码
2.整形提升的条件
(1)整形提升就是小于整形的类型提升到整形,如:char类型提升到int型。
(2)只要字符型(char)和短整形(short)的数据参与到表达式的运算,就会发生整形提升。
(3)整形提升是按照变量的数据类型的符号位来提升的 。
有符号数据:整形提升时会根据最高位的数字来补。比如:最高位是1,那么就会补1,补到32为比特位;最高位是0,则会补0
无符号数据:整型提升时,默认补0。
3.整形提升例子
(1)例子1
代码:
#include<stdio.h>
int main()
{char a = 5;char b = 126;//参与到表达式的运算(a+b),发生第一次整形提升char c = a + b;printf("%d\n",c);//第二次整形提升return 0;
}
运行结果:

代码分析:

(2)例子2
代码:
#include<stdio.h>
int main()
{char a = 0xb6;short b = 0xb600;int c = 0xb6000000;if (a == 0xb6)printf("a");if (b == 0xb600)printf("b");if (c == 0xb6000000)printf("c");return 0;
}
运行结果:

代码分析:a和b都发生了整形提升,数据发生了改变,只有c不需要整形提升,因此数据没有发生改变。

(3)例子3
代码:
#include<stdio.h>
int main()
{char c = 1;printf("%u\n", sizeof(c));printf("%u\n", sizeof(+c));printf("%u\n", sizeof(-c));return 0;
}
运行结果:

代码分析:

总结:只有在一些特定的情况下才会发生整形提升,从char和short类型提升为整形;有时候提升完,数据大小会发生改变。
三、算术转换
1.定义
(1)算术转换的条件:数据类型>=整形
(2)转换层次,由低到高

如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。
四、操作符的属性
1.作用
(1)用于复杂表达式的求值
(2)求值的三大因素
1. 操作符的优先级(相邻操作符,优先级高的先计算)2. 操作符的结合性(从左向右计算、从右向左计算或没有结合性)3. 是否控制求值顺序(逻辑操作符、三目操作符和逗号表达式)
2.做法
为了避免写出一些歧义表达式,所以我们要多利用括号。
相关文章:
【初阶C语言】操作符2---表达式求值
前言:本节重点介绍操作符的使用,如,优先级高低、类型转换等 一、逻辑操作符 前言:逻辑操作符包括逻辑与(&&)和逻辑或(||),操作对象:两个 1.逻辑与&…...
代码随想录day50|123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV
123. 买卖股票的最佳时机 III class Solution:def maxProfit(self, prices: List[int]) -> int:dp[[0]*5 for _ in range(len(prices))]dp[0][0]0dp[0][1]-prices[0]dp[0][2]0dp[0][3]-prices[0]dp[0][4]0for i in range(1,len(prices)):dp[i][0] dp[i-1][0]dp[i][1] max…...
Word 表格单元格无法垂直居中
Word使用 由于平时也需要用到word编写一些文档,但是咱们就是用的少,很多操作或者技巧不太清楚,很多小问题处理起来反而需要消耗很多时间,所以在这里记录平时遇到的一些问题。 表格无法垂直居中 类似于上图的情况,总之…...
python实现Flask POST Demo
数据处理逻辑 from flask import Flask, requestapp Flask(__name__)app.route(/, methods[POST]) def index():username request.form[username]password request.form[password]if username "Jhon" and password "1":return f"<html>&l…...
3-Pytorch张量的运算、形状改变、自动微分
3-Pytorch张量的运算、形状改变、自动微分 1 导入必备库2 张量的运算3 张量的算数运算4 一个元素的张量可以使用tensor.item()方法转成标量5 torch.from_numpy()和tensor.numpy()6 张量的变形7 张量的自动微分8 使用with torch.no_grad():包含上下文中使其不再跟踪计算9 使用te…...
用户权限数据转换为用户组列表(3/3) - Excel PY公式
最近Excel圈里的大事情就是微软把PY塞进了Excel单元格,可以作为公式使用,轻松用PY做数据分析。系好安全带,老司机带你玩一把。 实例需求:如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限,现在需要创建新的…...
VS2022+CMAKE+OPENCV+QT+PCL安装及环境搭建
VS2022安装: Visual Studio 2022安装教程(千字图文详解),手把手带你安装运行VS2022以及背景图设置_vs安装教程_我不是大叔丶的博客-CSDN博客 CMAKE配置: win11下配置vscodecmake_心儿痒痒的博客-CSDN博客 OPENCV配…...
JavaScript的内置类
一、认识包装类型 1.原始类型的包装类 JavaScript的原始类型并非对象类型,所以从理论上来说,它们是没有办法获取属性或者调用方法的。 但是,在开发中会看到,我们会经常这样操作: var message "hello world&q…...
6.英语的十六种时态(三面旗):主动、被动、肯定、否定、一般疑问句、特殊疑问句。
目录 一、do句型(以动词allow举例)。 (1)主动语态表格。 (2)被动语态表格。 (3)否定。 二、be句型(表格里的时态可以参考,查不到对应的资料)…...
SpringBoot连接Redis与Redisson【代码】
系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地地址一、引入依赖二、修改配…...
ardupilot开发 --- MAVSDK 篇
概述 MAVSDK是各种编程语言的库集合,用于与MAVLink系统(如无人机、相机或地面系统)接口。这些库提供了一个简单的API,用于管理一个或多个车辆,提供对车辆信息和遥测的程序访问,以及对任务、移动和其他操作…...
腾讯云AI超级底座新升级:训练效率提升幅度达到3倍
大模型推动AI进入新纪元,对计算、存储、网络、数据检索及调度容错等方面提出了更高要求。在9月7日举行的2023腾讯全球数字生态大会“AI超级底座专场”上,腾讯云介绍异构计算全新产品矩阵“AI超级底座”及其新能力。 腾讯云副总裁王亚晨在开场致辞中表示&…...
AB测试结果分析
一、假设检验 根据样本(小流量)的观测结果,拒绝或接受关于总体(全部流量)的某个假设,称为假设检验。 假设检验的基本依据是小概率事件原理(小概率事件几乎不发生),如果…...
Python模块和包:sys模块、os模块和变量函数的使用
文章目录 模块(module)引入外部模块引入部分内容包 (package)示例代码开箱即用sys模块sys.argvsys.modulessys.pathsys.platformsys.exit() os模块os.environos.system()os模块中的变量、函数和类 测试代码模块中的变量和函数的使用 总结:pyt…...
计算机软件工程毕业设计题目推荐
文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。 学长整理的题目标准: 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…...
嵌入式学习笔记(25)串口通信的基本原理
三根通信线:Tx Rx GND (1)任何通信都要有信息作为传输载体,或者有线的或则无线的。 (2)串口通信时有线通信,是通过串口线来通信的。 (3)串口通信最少需要2根ÿ…...
c++学习第十三
1)循环引用的案例及解决办法: #include <iostream> #include <memory> using namespace std; class A;class B { public:B(){cout<<"B constructor---"<<endl;}~B(){cout<<"B deconstructor----"<<endl;}std::weak_…...
java复习-线程的同步和死锁
线程的同步和死锁 同步问题引出 当多个线程访问同一资源时,会出现不同步问题。比如当票贩子A(线程A)已经通过了“判断”,但由于网络延迟,暂未修改票数的间隔时间内,票贩子B(线程B)…...
Qt指示器设置
目录 1. 样式设置 2. 行为设置 3. 交互设置 创建一个进度指示器控件 在Qt中设置指示器(Indicator)的外观和行为通常需要操作相关部件的属性和样式表。以下是如何在Qt中设置指示器的一些常见方式: 1. 样式设置 你可以使用样式表…...
计算机网络第四节 数据链路层
一,引入数据链路层的目的 1.目的意义 数据链路层是体系结构中的第二层; 从发送端来讲,物理层可以将数据链路层交付下来的数据,装换成光,电信号发送到传输介质上了 从接收端来讲,物理层能将传输介质的光&…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
