C++入门基础05:表达式(表达式基础、算术运算符与赋值运算符、逻辑关系运算符、成员访问运算符与条件运算符、位运算符、移位运算符与类型转换)

news2024/12/23 18:08:31

C++入门基础05:表达式(表达式基础、算术运算符与赋值运算符、逻辑关系运算符、成员访问运算符与条件运算符、位运算符、移位运算符与类型转换)

一、表达式基础

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

struct Demo {
    int num1 = 5;
    int num2 = 10;
};

//表达式基础
int main()
{
    //表达式
    //3+2  a+b  3*4+2

    //运算符求值顺序以及优先级
    //3*4+2   (3+5)*4+2 = == ++ -- .
    Demo demo;
    cout << demo.num1 + 5 + demo.num2 * 4 << endl;
    // 取成员的优先级比 + 和 * 要高。
    // 5+5+40 = 50

    //不同类型对象参与运算的对象转换
    float a = 10.8f;
    int b = 5;
    //先将int转为float,再参与计算
    cout << a + b << endl;
    
    //括号无视优先级
    //不知道优先级可以用括号来解决
    if ((a == b) || (a > 0)) {
        cout << "if" << endl;
    }
    
    return 0;
}

在这里插入图片描述

运算符优先级:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、算术运算符与赋值运算符

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

//表达式基础
int main()
{

    //算术运算符
    // + - * / % (求余/取模)
    cout<< 3+5 << endl;
    cout<< 10-2 << endl;
    cout<< 6*8 << endl;
    cout<< 9/3 << endl;
    cout<< 10%3<< endl;
    cout << "\n" << endl;

    //赋值运算符
    // = += -= *= /= %=
    // 赋值 先加再赋值 先减再赋值 先乘再赋值 先除再赋值 求余再赋值(求余计算必须是整数)
    int a;
    a = 10;
    cout << a << endl;
    a += 5; // a = a + 5;
    cout << a << endl;
    //其他同理....
    a %= 3;
    cout << a << endl;
    cout << "\n" << endl;

    //自增/自减运算符
    //++ -- 
    a++; //a = a +1
    cout << a << endl;
    a--; //a = a -1
    cout << a << endl;
    cout << "\n" << endl;

    int b = 6;
    cout << b << endl;
    cout << b++ << endl; //先将b赋给表达式后,再做自增运算。(输出的是表达式的结果)
    cout << b << endl;
    cout << ++b << endl; //先进行自增运算,再将结果赋给表达式。(输出的是表达式的结果)
    cout << b << endl;

    return 0;
}

在这里插入图片描述

三、逻辑关系运算符

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

//表达式基础
int main()
{   
    //逻辑运算符
    //!逻辑非
    //&& 逻辑与
    //|| 逻辑或
    int a = 9;
    int b = -2;
    if (a > 0 && b > 0)
        cout << "(a > 0 && b > 0):"<< (a > 0 && b > 0) << endl;
    if(a > 0 || b > 0)
        cout << "(a > 0 || b > 0):" << (a > 0 || b > 0) << endl;

    bool c = true;
    if (!c)
        cout << " c的值是假的,就是false" << endl;

    cout << "\n" << endl;

    //关系运算符
    //>> = <<= == !=
    cout << "a>b:" << (a > b) << endl;
    cout << "a>=b:" << (a >= b) << endl;
    cout << "a<b:" << (a < b) << endl;
    cout << "a<=b:" << (a <= b) << endl;
    cout << "a!=b:" << (a != b) << endl;
    cout << "a==b:" << (a == b) << endl;

    // == 与=
    if (a == 0)
        cout << "a等于1" << endl;

    return 0;
}

在这里插入图片描述

四、成员访问运算符与条件运算符

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

struct Student {
    string name = "zhangsan";
    int age = 12;
};

//表达式基础
int main()
{   
    //成员访问运算符
    //. ->
    Student* stu = new Student();
    //通过指针访问成员。
    cout << stu->name << "," << stu->age << endl;
    //这里可以解引用,通过点的方式访问。
    cout << (*stu).name << "," << (*stu).age << endl;

    //条件运算符
    //?:
    //(条件表达式) ? (满足条件执行第一条) : (不满足执行第二条)
    int a = 10;
    int b = 5;
    int c;
    a > b ? (c = a) : (c = b);//求较大值
    a < b ? (c = a) : (c = b);//求较小值
    cout << "c:" << c << endl; 

    //单目运算符: ++ --
    //双目运算符: + - * / %
    //三目运算符: 条件运算符
    return 0;
}

在这里插入图片描述

五、位运算符、移位运算符与类型转换

1、位运算符

为运算符:&(按位与); |(按位或); ^(按位异或);~(非/按位取反)。
&(按位与):只要有0,就是0。
|(按位或):只要有1,就是1。
^(按位异或):相同为0,相异为1。
~(非/按位取反):0取反为1,1取反为0。

13的二进制是=>1101
数字在计算机中存储是按照二进制进行存储的,一个数按照8位进行存储的话,最高位是一个符号位,表示正数还是负数,那么对于13这个数,是一个整数,那么二进制存储就是00001101,数字在计算机中是以补码的形式进行存储的,对于正数来说,原码和补码是一样的,但是对于负数来说,原码等于补码取反再加1(比如11110010,该二进制数的原码是这个11110010先减1再取反,11110010减1为11110001,再取反(最高位不取反)10001110,原码结果为10001110,为-14)。
原码:00001101 =>13
补码:00001101
00001101 取反=> 11110010 负数补码求原码=> 补码减1再取反=> 10001110=> -14
补码:11110010
原码:10001110 => -14
在这里插入图片描述

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

//位运算符与类型转换
int main()
{   
    //位运算符(针对整数)
    //为运算符:&(按位与) |(按位或) ^(按位异或)~(非/按位取反); 关系运算符(对应的是表达式):&& || !
    //整数的二进制表示
    //二进制:十进制=>2:10;3:11;4:100...
    int a = 13; //13 = 8+4+1=> 1101
    int b = 6; // 6 =4+2 =>0110
    cout << "按位与:" << (a & b) << endl;
    cout << "按位或:" << (a | b) << endl;
    cout << "按位异或:" << (a ^ b) << endl;
    cout << "按位取反:" << ~a << endl;

    return 0;
}

在这里插入图片描述

2、移位运算符

移位运算很多时候在编程中是很有用的一个操作。

13 = 8+4+1=> 1101 左移2位,就是110100 = 52。
左移就是乘以2,左移几位就是乘以几次2。13 *2 *2 = 52。
6 =4+2 =>0110 右移2位,就是01 = 1。
右移就是除以2,右移几位就是除以几次2。6 /2 /2 = 1。
在这里插入图片描述

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

//位运算符与类型转换
int main()
{   
    //位运算符(针对整数)
    //为运算符:&(按位与) |(按位或) ^(按位异或)~(非/按位取反); 关系运算符(对应的是表达式):&& || !
    //整数的二进制表示
    //二进制:十进制=>2:10;3:11;4:100...
    int a = 13; //13 = 8+4+1=> 1101
    int b = 6; // 6 =4+2 =>0110

    //移位运算符
    //<<(左移)>>(右移)
    cout << "a左移2位:"<< (a << 2) << endl;
    cout << "b右移2位:" << (b >> 2) << endl;

    return 0;
}

在这里插入图片描述

3、类型转换(显式转换与隐式转换)

显式转换 与 隐式转换

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

int main()
{   
    //类型转换
    //显式转换 与 隐式转换
    //隐式转换:(可能损失精度)
    //short->int
    //bool:0 1 (非0的数转为1)
    int c = 3.14;
    cout << "c:" << c << endl;

    //显式转换:
    //转换运算函数
    //static_cast const_cast

    return 0;
}

在这里插入图片描述

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

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

相关文章

Linux从入门到精通(九)——Linux编程

文章篇幅较长&#xff0c;建议先收藏&#xff0c;防止迷路 文章跳转Linux从入门到精通&#xff08;八&#xff09;——Linux磁盘管理goLinux从入门到精通&#xff08;九&#xff09;——Linux编程goLinux从入门到精通&#xff08;十&#xff09;——进程管理goLinux从入门到精…

教程一 Energy 构建简单的Windows、Linux、MacOSX桌面应用

Golang的Energy使用命令行工具安装开发环境&#xff0c;并运行一个应用。 环境安装 Energy 命令行工具 使用命令行工具自动安装Energy框架的所有依赖(CEF)&#xff0c;支持Window、Linux、MacOSX 安装过程从网络下载CEF和Energy库 获取命令行工具 一、预编译命令行工具 下载地…

银行业国产数据库现状

数据库发展历程 数据库经历了单机数据库、集中式数据库、非关系型数据库、新型数据库四阶段。 单机数据库&#xff1a;单机数据库就是只能运行在单机上&#xff0c;不提供网络功能的数据库。 集中式数据库&#xff1a;数据库是一种经典、传统的数据库结构&#xff0c;多台机…

js内容整理

js内容整理 定时器 JavaScript 提供定时执行代码的功能&#xff0c;叫做定时器&#xff08;timer&#xff09;&#xff0c;主要由setTimeout()和setInterval()这两个函数来完成。 setTimeout() setTimeout函数用来指定某个函数或某段代码&#xff0c;在多少毫秒之后执行。它…

公益是书籍是什么,公益书籍变现模式有哪些

最近&#xff0c;我看到很多人在朋友圈里做公益书籍。 什么是公益书籍&#xff0c;公益书籍又是怎么进行变现的呢&#xff1f; 公益书籍主要是借助公益的逻辑&#xff0c;分发给各种家长。家长每次根据书单给孩子选择相应的书&#xff0c;15元左右就能拿到一套。 公益书籍实…

Linux进程地址空间

哪有明知明天会死今天就会上吊的傻瓜&#xff1f; -要乐观喔 本次博客的分享呢可能比较抽象&#xff0c;博主尽力画图分析&#xff0c;力图给老铁阐明清楚。 目录 ⚽一、进程地址空间区域划分 &#x1f453;Ⅰ区域划分 &#x1f453;Ⅱ虚拟地址和物理地址 ⚽二、页表和映…

科技云报道:发布分布式云战略,中国电子云吹响冲锋号角

科技云报道原创。 过去三年&#xff0c;中国电子云一直牢牢抓住业界的目光&#xff0c;不仅因为“国家队”的身份光环&#xff0c;更因实打实的成绩令人侧目。 据悉&#xff0c;中国电子云核心产品中心云CECSTACK&#xff0c;起步可达3000节点规模&#xff0c;最大可支撑每秒…

一文搞懂堆外内存(模拟内存泄漏)

一、前言 平时编程时&#xff0c;在 Java 中创建对象&#xff0c;实际上是在堆上划分了一块区域&#xff0c;这个区域叫堆内内存。 使用这 -Xms -Xmx 来指定新生代和老年代空间大小的初始值和最大值&#xff0c;这初始值和最大值也被称为 Java 堆的大小&#xff0c;即 堆内内…

2022亚太C题赛题分享

是否全球变暖&#xff1f; 加拿大的49.6C创造了地球北纬50以上地区的气温新纪录&#xff0c;一周内数百人死于高温&#xff1b;美国加利福尼亚州死亡谷是54.4C&#xff0c;这是有史以来地球上记录的最高温度&#xff1b;科威特53.5C&#xff0c;甚至在阳光下超过70多个C&#x…

模板进阶模板分离编译的问题与解决

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、模板参数1.非类型模板参数比如库中的array2.类型模板参数二、模板参数的特化1.全特化2.偏特化&#xff08;半特化&#xff09;三、模板的…

RTSP 和 RTMP原理 通过ffmpeg实现将本地摄像头推流到RTSP服务器

RTSP 和 RTMP原理 & 通过ffmpeg实现将本地摄像头推流到RTSP服务器 文章目录RTSP 和 RTMP原理 & 通过ffmpeg实现将本地摄像头推流到RTSP服务器一、流媒体&#xff1a;RTSP 和 RTMP0、参考资料1、RTSP 和 RTMP的工作原理1&#xff09;RTSP工作原理2&#xff09;RTMP工作原…

计算机组成原理期末复习第三章-3(唐朔飞)

计算机组成原理期末复习第三章-3&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&am…

C树和森林的研究学习随记【一】

文章目录树与森林树结构初识树基本的相关概念森林二叉树(Binary Tree)满二叉树【饱满】完全二叉树【少了叶子的满二叉树】总结树和森林的转换快速转换技巧森林转化为二叉树分辨二叉树的五大性质树与森林 树是一种的数据结构。顾名思义&#xff0c;类似于我们生活中的树一样。【…

C++11标准模板(STL)- 算法(std::stable_sort)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 将范围内的元素排序&#…

m基于Simulink的高速跳频通信系统抗干扰性能分析

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 信道为Rayleigh衰落信道下的性能分析和Nakagami-m衰落信道下的性能分析。本课题我们采用的仿真参数如下&#xff1a; simulink仿真模型如下所示&#xff1a; 跳频是最常用的扩频方式之一…

Hadoop笔记-01概述

文章目录1 什么是大数据&#xff1f;1.1 大数据计算模式及代表产品1.2 云计算与物联网1.2.1 云计算1.2.1.1 虚拟化1.2.1.2 分布式存储1.2.1.3 分布式计算1.2.1.4 多租户1.3 物联网1.3.1 识别和感知技术1.3.2 网络与通信技术1.3.3 数据挖掘与融合技术1.4 大数据与云计算、物联网…

正态分布,二维正态分布,卡方分布,学生t分布——概率分布学习 python

目录 基本概念 概率密度函数(PDF: Probability Density Function) 累积分布函数(CDF: Cumulative Distribution Function) 核密度估计&#xff08;(kernel density estimation&#xff09; 1.正态分布 概率密度函数&#xff08;pdf&#xff09; 正态分布累积分布函数(CD…

山东大学软件学院操作系统课程设计(2021秋季,nachos)实验6

一、实验内容 二、源码分析 1. 理解nachos单线程地址映射机制 Machine::Run()中调用Machine::OneInstruction(Instruction *instr)逐条执行可执行文件中的指令&#xff0c;执行指令过程中和获取下一条指令时如果访问内存&#xff0c;通过machine->ReadMem(…)/WriteMem(……

嵌入式开发学习之--用蜂鸣器来传递摩斯码

本篇文章致力于从开发的角度思考问题&#xff0c;而不是搞学术的东西。 文章目录前言一、项目概况1.1、项目需求1.2、项目来源1.3、项目开发环境1.4、项目意义二、开发步骤2.1、了解什么是摩斯码2.2、构建项目流程图2.3、找到合适的模板2.4、增加文件2.5、添加代码2.6、读入数据…

学生HTML个人网页作业作品 (水果商城HTML+CSS)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…