C++要点总结_02_表达式与语句

目录

  • 2 表达式与语句
    • 2.1 算术运算符
    • 2.2 结合性与优先级
    • 2.3 表达式
    • 2.4 语句

2 表达式与语句

  1. 运算符就是具有运算功能的符号。
  2. “::” :作用域运算符。
  3. ->:成员指针运算符。
  4. 运算符种类:算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、移位运算符、sizeof运算符、条件运算符和逗号运算符。

2.1 算术运算符

  1. 算术运算符:的加(+)、减(-)、乘(*)、除(/)、模运算(%)、自增(++)、自减(–)。
// 算术运算符实例
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a=1,b=2;cout <<"a+b= "<< a+b <<endl;     // 1+2cout <<"a+100= "<< a+100 <<endl; // 1+100cout <<"a-b= "<< a-b <<endl;     // 1-2cout <<"a-100="<< a-100 <<endl;  // 1-100cout <<"a*b="<< a*b <<endl;     // 1*2cout <<"a*100="<< a*100 <<endl; // 1*100cout <<"a/b="<< a/b <<endl;     // 1/2cout <<"a/100="<< a/100 <<endl; // 1/100cout <<"a%b="<< a%b <<endl;     // 1%2cout <<"a%100="<< a%100 <<endl; // 1%100cout <<"a++:"<< a++ <<endl;     // 先赋值,输出1,a再自增,a+=1;a=2cout <<"a--:"<< a-- <<endl;     // 先赋值,输出2, a再自减,a-=1;a=1cout <<"++a:"<< ++a <<endl;     // a自增,a+=1;a=2,再输出2cout <<"--a:"<< --a <<endl;     // a自减,a-=1;a=1,再输出1return 0;
}
/* 运行结果:
a+b= 3
a+100= 101
a-b= -1
a-100=-99
a*b=2
a*100=100
a/b=0
a/100=0
a%b=1
a%100=1
a++:1
a--:2
++a:2
--a:1
Program ended with exit code: 0
*/
  1. 关系运算符:比较两个对象的大小,结果为true或false。
  2. 关系运算符种类:< ,> ,<= ,>= ,, !=。关系运算符
    的优先级低于算术运算符,高于赋值运算符。<,<=,>,>=的优先级相同,高于
    和!=,==和!=的优先级相同。
// 算术运算符实例
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a=1,b=200,c=0;printf("a>b: %d\n",a>b);   // 0 falseprintf("a>=b: %d\n",a>=b); printf("a<b: %d\n",a<b);   // 1 trueprintf("a<=b: %d\n",a<=b);printf("a==b: %d\n",a==b);printf("a+1==c: %d\n",a+1==c);printf("a!=b: %d\n",a!=b);return 0;
}/* 运行结果
a>b: 0
a>=b: 0
a<b: 1
a<=b: 1
a==b: 0
a+1==c: 0
a!=b: 1
Program ended with exit code: 0*/
  1. 逻辑运算符:对真和假这两种逻辑值进行运算,运算后的结果仍是一个逻辑值。
  2. &&:逻辑与。当两个对象都为真时,结果为真;有一个对象为假或两个对象都为假时,结果为假。
  3. ||: 逻辑或。当两个对象都为假时,结果为假;有一个对象为真或两个对象都为真时,结果为真。
  4. ! : 逻辑非。当对象为真时,运算结果为假;当对象为假时,运算结果为真。
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a =1, b=2,c=3;// && 逻辑与运算,两个表达式均为真,结果才为真。printf("(a>b && a> c): %d \n",a>b && a> c);printf("(a>b && a< c):  %d \n",a>b && a< c);printf("(a<b && a<c): %d \n",a<b && a<c);// ||  逻辑或运算,两个表达式均为真,结果才为真。printf("(a>b): %d \n",a>b || a> c);printf("(a>b || a< c):  %d \n",a>b || a< c);printf("(a<b || a<c): %d \n",a<b || a<c);// 逻辑非运算,表达式为真,去非之后,结果为假,反之为真。printf("!(a>b): %d \n",!(a>b));printf("!(a<b): %d \n",!(a<b));return 0;
}
/* 运行结果
(a>b && a> c): 0 
(a>b && a< c):  0 
(a<b && a<c): 1 
(a>b): 0 
(a>b || a< c):  1 
(a<b || a<c): 1 
!(a>b): 1 
!(a<b): 0 
Program ended with exit code: 0 
*/
  1. 赋值运算符:赋值运算符分为简单赋值运算符和复合赋值运算符,复合赋值运
    算符又称为带有运算的赋值运算符,简单赋值运算符就是给变量赋值的运算符。
  2. 复合赋值运算符:是等同的简单赋值运算符和其他运算的组合。
  3. 复合赋值运算符: +=、-=、*=、/=、%=、<<=、>>=、&= 、!=、^=。
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a =1, b=2,c=3;//  +=、-=、*=、/=、%=、<<=、>>=、&= 、!=、^=printf("a+=b: %d \n",a+=b);  // a = a+b = 1+2 =3printf("a-=b:  %d \n",a-=b); // a = a-b = 3-2 =1printf("a*=b: %d \n",a*=b);  // a = a*b = 1*2 =2printf("a/=b: %d \n",a/=b);  // a = a/b = 2*2 =1printf("a%=b:  %d \n",a%=b); // a = a%b = 1%2 =1printf("a<<=c: %d \n",a<<=c);// a = a*2*2*2 = 8printf("a>>=c: %d \n",a>>=c);// a = a/2/2/2 = 1printf("a&=c: %d \n",a&=c);  // a=a&c= 01(二进制)  & 11 (二进制) = 01(二进制) = 1(十进制)printf("a|=c: %d \n",a|=c);  // a=a|c= 01(二进制)  | 11 (二进制) = 11(二进制) = 3(十进制)printf("a^=c: %d \n",a^=c);  // a=a^c= 11(二进制)  | 11 (二进制) = 00(二进制) = 0(十进制)return 0;
}/*a+=b: 3a-=b:  1a*=b: 2a/=b: 1a=b:  1a<<=c: 8a>>=c: 1a&=c: 1a|=c: 3a^=c: 0Program ended with exit code: 0*/
  1. 位运算符:有&(位逻辑与)、|(位逻辑或)、^(位逻辑异或)和~(取反运算符)。
  2. 位运算优先级:在双目运算符中,位逻辑与优先级:最高,位逻辑或次之,位逻辑异或最低。取反运算符为单目运算符。
    13.位逻辑与:是将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求与,若两个操作数对象同一位都为1,则结果对应位为1,否则结果中对应位为0。
    14.位逻辑或:是将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求或,若两个操作数对象同一位都为0,则结果对应位为0,否则结果中对应位为1。
    15.位逻辑异或:将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求异或,若两个操作数对象同一位不同时为1,则结果对应位为1,否则结果中对应位为0。
    16.取反运算符:将操作数转换成二进制表示方式,然后将各位二进制位由1变为0,由0变为1。

#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a =1, b=2;printf("a&b: %d \n",a&b);  // 1&2 = (二进制) 01&10 =00(二进制) = 0  (十进制)printf("a|b: %d \n",a|b);  // 1|2 = (二进制)01|10 =11(二进制) = 3   (十进制)printf("a^b: %d \n",a^b);  // 1^2 = (二进制)01^10 =11 (二进制)= 3    (十进制)printf("~a: %d \n",~a);   // ~1 = (二进制)~00000001=10000010 (二进制)= -2  (十进制)return 0;
}
/*a&b: 0a|b: 3a^b: 3~a: -2Program ended with exit code: 0*/
  1. 移位运算符:<<(左移)和>>(右移),
  2. 左移: 将一个二进制操作数对象按指定的移动位数向左移,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充。左移相当于乘以2的幂。
  3. 右移:将一个二进制的数按指定的位数向右移动,右边(低位端)溢出的位被丢弃,左边(高位端)的空位或者一律用0填充,或者用被移位操作数的符号位填充,运算结果和编译器有关,在使用补码的机器中,正数的符号位为0,负数的符号为1。
  4. sizeof运算符:sizeof(数据类型)、sizeof(表达式)。是唯一一个用到字母
    的运算符。sizeof(int);int a[10];sizeof(a);
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a[10];cout<<sizeof(int)<<endl;cout<<sizeof(a)<<endl;return 0;
}
/*  运行结果440Program ended with exit code: 0*/
  1. 条件运算符:C++中仅有的一个三目运算符,该运算符需要3个运算数对象,形式如下:<表达式1>?<表达式2><表达式3>。表达式1是一个逻辑值,可以为真或假。若表达式1为真,则运算结果是表达式2,如果表达式1为假,则运算结果是表达式3。这个运算相当于一个if语句。

#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a=1,b=2;a>b?cout<<"a>b"<<endl:cout<<"a<=b"<<endl;return 0;
}
/*  运行结果
a<=b*/
  1. 逗号运算符:。逗号运算符的优先级别最低,结合方向自左至右,其功能是把两个表达式连接起来组成一个表达式。逗号运算符是一个多目运算符,并且操作数
    的个数不限定,可以将任意多个表达式组成一个表达式。整个逗号表达式的值和类型由最后一个表达式决定。

2.2 结合性与优先级

  1. 运算符优先级决定了在表达式中各个运算符执行的先后顺序。高优先级运算符要先于低优先级运算符进行运算。
  2. 当表达式中出现了括号时,会改变优先级。先计算括号中的子表达式值,再计算整个表达式的值。

2.3 表达式

1.表达式:由运算符、括号、数值对象或变量等几个元素构成。一个数值对象是最简单的表达式,一个表达式可以看成一个数学函数,带有运算符的表达式通过计算将返回一个数值。
2. 表达式类型:算术表达式、关系表达式、条件表达式、赋值表达式、逻辑表达式和逗号表达式。
3. 表达式中的类型转换:隐式转换,强制类型转换。
4. 隐式转换:a.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。赋值时会把赋值类型和被赋值类型转换成同一类型,一般赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。b.int型和long型运算时,先把int量转成long型后再进行运算。所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再进行运算。char型和short型参与运算时,必须先转换成int型。
5. 强制类型转换:生在不同数据类型的量混合运算时,由编译系统自动转换数据类型。

#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a;short c = 1;char d = 65;float x =3.14;double y = x;a = -x;unsigned long aa = 100;cout<<"a:"<<a<<endl;cout<<"sizeof(d+c):"<<sizeof(d+c)<<endl;  // char 和short相加,现转换成int类型。cout<<"sizeof(y):"<<sizeof(y)<<endl;cout<<"sizeof(x+y):"<<sizeof(x+y)<<endl;cout<<"sizeof(a+aa):"<<sizeof(a+aa)<<endl;a = -10;cout<<"(a+aa):"<<(a+aa)<<endl;cout<<"int(x):"<<int(x)<<endl;return 0;
}/* 运行结果
a:-3
sizeof(d+c):4
sizeof(y):8
sizeof(x+y):8
sizeof(a+aa):8
(a+aa):90
int(x):3
Program ended with exit code: 0*/

2.4 语句

  1. 语句:语句是最小的可执行单元,一条语句由一个分号结束。
  2. 左值:内存当中持续储存的数据。
  3. 右值:临时储存的结果。
#include <iostream>
#include <type_traits>
#include <cmath>
using namespace std;int main(int argc, const char * argv[]) {int a=10;
//
//    cout<<"a+=a*=a/=a-6:"<<a+=a*=a/=(a-6)<<endl;int b =a+=a*=a/=a-6;cout<<"b:"<<b<<endl;int d=2,c;c = a+d;d = a;a = c-d;cout<<"a:"<<a<<endl;cout<<"d:"<<d<<endl;return 0;
}/* 运行结果
b:8
a:2
d:8
Program ended with exit code: 0*/

参考《C++从入门到精通》

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

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

相关文章

Codeforces Round 654 (Div. 2) C. A Cookie for You (模拟)

我认为这道题就是个脑筋急转弯。 首先我们知道当a b < n m的时候&#xff0c;饼干总数都不够人的总数&#xff0c;那肯定是NO。 并且注意题干&#xff0c;我们可以得知当a b的时候&#xff0c;第一类和第二类人可以任意选两种饼干中的一种。 之后我们可以分类讨论一下。 …

网格布局 HTML CSS grid layout demo

文章目录 页面效果代码 (HTML CSS)参考 页面效果 代码 (HTML CSS) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

[ BLE4.0 ] 伦茨ST17H66开发-串口UART0的接收与发送

目录 一、前言 二、实现步骤 1.设置回调函数 2.关闭睡眠模式 三、效果展示 四、工程源代码 一、前言 串口通信在任何一款单片机开发中都是尤为重要的。本文涉及的开发所使用的例程依然是基于[ BLE4.0 ] 伦茨ST17H66开发-OSAL系统中添加自己的Task任务文章的工程源码&#x…

windows@powershell@任务计划@自动任务计划@taskschd.msc.md

文章目录 使用任务计划windows中的任务计划任务计划命令行程序开发windows 应用中相关api传统图形界面FAQ schtasks 命令常见用法创建计划任务删除计划任务查询计划任务修改计划任务运行计划任务 PowerShell ScheduledTasks常用 cmdlet 简介1. Get-ScheduledTask2. Register-Sc…

Git远程仓库推送

这里我只连接了两个站点的远程仓库&#xff0c;一个是国内的Gitee&#xff0c;另一个是Github&#xff0c;这两个站点的连接方式主要有两种&#xff0c;第一种就是通过https来连接远程仓库&#xff0c;另一种是通过ssh公钥来连接&#xff0c;这两个站点练接的大致过程都是一样的…

我出一道面试题,看看你能拿 3k 还是 30k!

大家好&#xff0c;我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场&#xff0c;接下来我会出一道经典的后端面试题&#xff0c;你只需要进行 4 个简单的选择&#xff0c;就能判断出来你的水平是新手&#xff08;3k&#xff09;、初级&#xff08;10k&#xff09;、中…

4 款最佳 C# 无头浏览器

摘要&#xff1a; 在当今大数据时代&#xff0c;高效的数据采集成为众多项目的关键一环。对于偏好C#语言的开发者而言&#xff0c;无头浏览器是实现网页自动化交互、数据抓取的强大工具。本文将深入探讨四款顶尖的C#无头浏览器库&#xff0c;分析它们的特性和应用场景&#xf…

怎么把C盘分成两个盘?让C盘分区更简单,赶快试试!

在日常使用电脑的过程中&#xff0c;有时我们可能希望将C盘分割成两个独立的分区&#xff0c;以便更好地管理文件和数据。这种操作需要谨慎进行&#xff0c;因为错误的分区操作可能导致数据丢失。那么&#xff0c;我们该怎么把C盘分成两个盘呢&#xff1f;下面&#xff0c;我将…

lua 游戏架构 之 游戏 AI (六)ai_auto_skill

定义一个为ai_auto_skill的类&#xff0c;继承自ai_base类。ai_auto_skill类的目的是在AI自动战斗模式下&#xff0c;根据配置和条件自动选择并使用技能。 lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客文章浏览阅读379次。定义了一套接口和属性&#…

vue3在元素上绑定自定义事件弹出虚拟键盘

最近开发中遇到一个需求: 焊接机器人的屏幕上集成web前端网页, 但是没有接入键盘。这就需要web端开发一个虚拟键盘,在网上找个很多虚拟键盘没有特别适合,索性自己写个简单的 图片: 代码: (代码可能比较垃圾冗余,也没时间优化,凑合看吧) 第一步:创建键盘组件 为了方便使用…

3.2.微调

微调 ​ 对于一些样本数量有限的数据集&#xff0c;如果使用较大的模型&#xff0c;可能很快过拟合&#xff0c;较小的模型可能效果不好。这个问题的一个解决方案是收集更多数据&#xff0c;但其实在很多情况下这是很难做到的。 ​ 另一种方法就是迁移学习(transfer learning…

c++如何理解多态与虚函数

目录 **前言****1. 何为多态**1.1 **编译时多态**1.1.1 函数重载1.1.2 模板 **1.2 运行时多态****1.2.1 虚函数****1.2.2 为什么要用父类指针去调用子类函数** **2. 注意****2.1 基类的析构函数应写为虚函数****2.2 构造函数不能设为虚函数** **本文参考** 前言 在学习 c 的虚…

打造重庆市数字化教育“新名片”,广阳湾珊瑚中学凭实力“出圈”!

分布于教学楼连廊顶部的智能照明设备,根据不同的时间和场景需求自动调节灯光亮度和开关状态;安装于各个教室内的智能黑板、学校同步时钟、学生互动设备,在极简以太全光网的赋能下,为师生提供丰富的教学体验与学习支持......行走于重庆市广阳湾珊瑚中学,像是与充满科技感的“校园…

病理AI领域的基础模型汇总|顶刊专题汇总·24-07-26

小罗碎碎念 本期文献主题&#xff1a;病理AI领域的最新基础模型 今天的推文是一期生日特辑&#xff0c;定时在下午六点二十一分发表&#xff08;今天农历六月二十一&#xff0c;哈哈&#xff09;&#xff0c;算是自己给自己的24岁生日礼物&#xff0c;希望24岁这一年&#xff0…

ollama本地部署大语言模型记录

目录 安装Ollama更改模型存放位置 拉取模型GemmaMistralQwen1.5(通义千问)codellama 部署Open webui测试性能知识广度问题1问题2 代码能力总结 最近突然对大语言模型感兴趣 同时在平时的一些线下断网的CTF比赛中&#xff0c;大语言模型也可以作为一个能对话交互的高级知识检索…

SSRF中伪协议学习

SSRF常用的伪协议 file:// 从文件系统中获取文件内容,如file:///etc/passwd dict:// 字典服务协议,访问字典资源,如 dict:///ip:6739/info: ftp:// 可用于网络端口扫描 sftp:// SSH文件传输协议或安全文件传输协议 ldap://轻量级目录访问协议 tftp:// 简单文件传输协议 gopher…

【JavaScript】函数声明和函数表达式的区别

文章目录 一、函数声明1. 定义方式2. 作用域提升&#xff08;Hoisting&#xff09;3. 块级作用域 二、函数表达式1. 定义方式2. 作用域提升&#xff08;Hoisting&#xff09;3. 自引用 三、其他区别1. 函数名2. 可读性和代码组织3. 使用场景 四、总结函数声明函数表达式 在Java…

【大模型系列】Video-LaVIT(2024.06)

Paper&#xff1a;https://arxiv.org/abs/2402.03161Github&#xff1a;https://video-lavit.github.io/Title&#xff1a;Video-LaVIT: Unified Video-Language Pre-training with Decoupled Visual-Motional TokenizationAuthor&#xff1a;Yang Jin&#xff0c; 北大&#x…

Java面试八股之@Qualifier的作用

Qualifier的作用 Qualifier 是 Spring 框架中的一个非常有用的注解&#xff0c;它主要用于解决在依赖注入过程中出现的歧义问题。当 Spring 容器中有多个相同类型的 Bean 时&#xff0c;Qualifier 可以帮助指明应该使用哪一个具体的 Bean 进行注入。 Qualifier 的作用&#x…

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件&#xff08;精确、模糊&#xff09;查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…