【带头学C++】----- 1.基础知识 ---- 1.23 运算符概述

news2024/11/16 22:55:19

1.23 运算符概述

       运算符,在数学中常见的加减乘除之类的符号,那么在C++在编程语言中呢,将使用特定的符号或标记对操作数进行操作以生成结果。用算术运算符将运算对象(也称操作数)连接起来的、符合C ++语法规则的式子,称为C ++算术表达式运算对象包括常量、变量、函数返回值等,以下是一些常见的运算符概述:

( 注:a+b,a就是左边的操作数,b就是右边的操作数)

1.算术运算符

  • 加法运算符(+):将两个操作数相加,例如 a + b
  • 减法运算符(-):从左操作数中减去右操作数,例如 a - b
  • 乘法运算符(*):将两个操作数相乘,例如 a * b
  • 除法运算符(/):将左操作数除以右操作数,例如 a / b
  • 取模运算符(%):返回两个操作数相除的余数,例如 a % b
  •     +=  :  a+=b,相当于 a= a+b;
  •     -=   :  a-=b,相当于 a= a-b;
  •     *=   :  a*=b,相当于 a= a*b;    注意=号右边的看成一个整体,例如a*=2+3; 实际为a=a*(2+3)
  •     /=   :   a/=b,相当于 a= a/b;
  •    %=  :    a/=b,相当于 a= a%b;

1.1 对于 / 符号 

   1.取整符号   /

例如:7/2 = 3,7除以2,商为3,余数为1,那取整就是取的商的结果,3  (这里的=是我们数学意义上的=,在计算机里,我们要比较,需要使用比较运算符 ==,双等于号)

   2.除法符号    /

例如:7/2.0 == 3.5,此时除数为浮点类型,所以我们的被除数7,使用/符号表示的为除法运算,并且根据浮点数的小数点,保留相应的位数。

1.2 对于取模运算 %

    例如:7%2 = 1,7除以2.商为3,余数为2,取模就是取的除不尽的余数,如果除尽的就是0,除不尽的就是拿的是余数,2

1.2.1 产生随机数

这里引用千锋教育网络基础班的资料,解释一下取模的一些用法

2.一些复合运算的案例

 这里要考虑优先级,从右往左--------<<<<<<--------依次计算

int a = 3; 

a+= a-=a*=a;

根据表达式 `a+= a-=a*=a;`,其运算结果和过程如下:

1. 首先,根据赋值运算符的优先级规则,先执行乘法赋值运算 `a*=a`。
   - 乘法赋值运算 `a*=a` 将 `a` 乘以自身的值,结果为 `9`。
   - 此时的表达式变为 `a+= a-=9;`。

2. 接着,执行减法赋值运算 `a-=9`。
   - 减法赋值运算 `a-=9` 将 `a` 减去 `9` 的值,结果为 `9-9=0`。
   - 此时的表达式变为 `a+=0;`。

3. 最后,执行加法赋值运算 `a+=0`。
   - 加法赋值运算 `a+=0` 将 `a` 加上 `0` 的值,结果为 `0+(0)=0`。
   - 所以最终的赋值结果是 `a` 等于 `0`。

综上所述,根据给定的表达式 `a+= a-=a*=a;` ,其运算结果是 `0`。

程序运行: 

 

2.关系运算符(比较运算符)

  • 相等运算符(==):检查两个操作数是否相等,例如 a == b
  • 不等运算符(!=):检查两个操作数是否不相等,例如 a != b
  • 大于运算符(>):检查左操作数是否大于右操作数,例如 a > b
  • 小于运算符(<):检查左操作数是否小于右操作数,例如 a < b
  • 大于等于运算符(>=):检查左操作数是否大于或等于右操作数,例如 a >= b
  • 小于等于运算符(<=):检查左操作数是否小于或等于右操作数,例如 a <= b

3.逻辑运算符

  • 逻辑与运算符(&&):当两个操作数都为真(在代码里面是叫True)时,返回真。如果任一操作数为假(在代码里面是叫False),则返回假,例如 a && b
  • 逻辑或运算符(||):当任一操作数为真时,返回真。如果两个操作数都为假,则返回假,例如 a || b
  • 逻辑非运算符(!):将操作数的逻辑值取反,例如 !a

4.赋值运算符

  • 简单赋值运算符(=):将右操作数的值赋给左操作数,例如 a = b
  • 复合赋值运算符:例如加法赋值运算符(+=)、减法赋值运算符(-=)、乘法赋值运算符(*=)等。

 5.区分什么是单目、双目、三目

如果运算符需要一个运算对象 就叫单目运算符

如果运算符 需要两个运算对象 就叫双目运算符

如果运算符 需要三个运算对象 就叫三目运算符

如果运算符 需要多个运算对象 就叫多目运算符

6. 复合运算符

常见的复合运算符包括:

  • 加法赋值运算符(+=):将右操作数的值加到左操作数,并将结果赋给左操作数,例如 a += b 等价于 a = a + b
  • 减法赋值运算符(-=):从左操作数中减去右操作数的值,并将结果赋给左操作数,例如 a -= b 等价于 a = a - b
  • 乘法赋值运算符(*=):将左操作数乘以右操作数的值,并将结果赋给左操作数,例如 a *= b 等价于 a = a * b
  • 除法赋值运算符(/=):将左操作数除以右操作数的值,并将结果赋给左操作数,例如 a /= b 等价于 a = a / b
  • 取模赋值运算符(%=):将左操作数除以右操作数的余数赋给左操作数,例如 a %= b 等价于 a = a % b

1.23.6 按位“与”以及 按位取反

1.按位“与”  &

语法:全1为1  有0为0
特点:和1相与保持不变    和0相与为0
场景: 将指定位 清0

例如:

   1100 1010
&  1011 1100 
-----------------
   1000 1000

注:代码中需要将这样二进制的转成16进制(单片机开发经常使用) 

 2.按位“或” |

语法:有1为1全0为0

特点:和1或置1,和0或 保持不变(两个只要有一个1就是1,有0不管,原来是啥还是啥)

场景:将指定位 置1

   1100 1010
|  1011 1100 
-----------------
   1111 1110

3.按位取反 “~”

语法:0变1,1变0

例如:

~1011 1101 == 0100 0010

1.23.7 按位“异或”运算符

1.按位异或 ^

语法:相同为0,不同为1
特点:和1异或取反,和0异或保持不变
场景:将指定位发生翻转

例如:

   1100 1010
^  1011 1100 
-----------------
   0111 1110

1.23.8 左移、右移运算符

1.左移运算符 <<   

左移<<:左边丢弃 右边补0
移动的位数 不要超过 自身位的宽度

例如:dataNum = 1011 1101    

现在执行 dataNum << 3; 则dataNum == 1110 1000  向左移动3位,右边补0;

例如代码中:int data = 10;10的二进制是1010  (记住转十进制4位,就是8421十进制从左往右)

那么0000 1010 <<2;左移两位变成:0010 1000 =32+8 = 40 

2.右移运算符 >> 

右移<<:右边丢弃 左边补0(负数补1)

引用千锋教育c++基础班资料笔记中内容

 不管是算术右移、还是逻辑右移都是编译器决定,我们使用者是无法确定的。

无符号数:右边丢弃左边补0有符号数:
正数:右边丢弃左边补0
负数:右边丢弃左边补0(逻右移)
负数:右边丢弃 左边补1 (算术右移)

引用千锋教育c++基础班资料笔记中案例

下图就是我自己使用的计算机的右移策略是算术右移; 

 

今天先到这里,有问题的打在评论区或者私聊我。谢谢支持,mua爱大家

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

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

相关文章

配置Sentinel 控制台

1.遇到的问题 服务网关 | RuoYi 最近调试若依的微服务版本需要用到Sentinel这个组件&#xff0c;若依内部继承了这个组件连上即用。 Sentinel是阿里巴巴开源的限流器熔断器&#xff0c;并且带有可视化操作界面。 在日常开发中&#xff0c;限流功能时常被使用&#xff0c;用…

《现代音乐人编曲手册_传统管弦乐配器和MIDI》 笔记

MIDI 已经广泛应用在音乐制作的各个领域&#xff0c;但模仿传统管弦乐队的演奏仍是公认的 MIDI制作难点。很多制作者使用了庞大的采样音源&#xff0c;但仍然制作不出像样的管弦乐作品。即便是音乐专业出身、学习过传统管弦乐配器法的专业人士&#xff0c;也经常出现“谱面没问…

UGO+DRS评复之路

前言 针对数据库整体迁移方案&#xff0c;为解决异构平台数据库迁移&#xff0c;为减轻迁移人员的工作强度以及迁移周期。华为云GaussDB迁移UGO&DRS迁移工具应运而生。 UGO介绍 数据库和应用迁移&#xff08;Database and Application Migration UGO&#xff0c;简称为UG…

2 https原理

1 HTTPS与HTTP的区别&#xff1f;

Linux友人帐之日志与备份

一、日志 1.1概述 日志文件是重要的系统信息文件&#xff0c;其中记录了许多重要的系统事件&#xff0c;包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来说也很重要&#xff0c;它记录了系统每天发生的各种事情&#…

【lesson1】数据库基础

文章目录 连接数据库服务器什么是数据库初步见识数据库 连接数据库服务器 指令&#xff1a; -h&#xff1a;指明登入部署了MySQL服务的主机 -P&#xff1a;指明我们要访问的端口号 -u&#xff1a;指明登入用户 -p&#xff1a;指明需要输入密码 什么是数据库 在Linux查看具…

高防CDN:保卫您的网站免受攻击之利与弊

在当今数字化时代&#xff0c;网络安全对于网站经营者至关重要。高防CDN&#xff08;Content Delivery Network&#xff09;技术旨在提供强大的安全性&#xff0c;以保护网站免受恶意攻击。本文将探讨高防CDN为普通网站带来的优势与不足之处&#xff0c;并分析国内外高防CDN的发…

Use nvidia card in docker

1.确保在宿主机上已经安装了nvidia 显卡的驱动 $ nvidia-smi 2.准备Nvidia-docker的环境 $ distribution$(. /etc/os-release;echo $ID$VERSION_ID) && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/k…

基于SSM的点餐平台系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

OpenCV #以图搜图:均值哈希算法(Average Hash Algorithm)原理与实验

1. 介绍 均值哈希算法&#xff08;Average Hash Algorithm&#xff09; 是哈希算法的一种&#xff0c;主要用来做相似图片的搜索工作。 2. 原理 均值哈希算法&#xff08;aHash&#xff09;首先将原图像缩小成一个固定大小的像素图像&#xff0c;然后将图像转换为灰度图像&am…

贝叶斯优化分步指南:基于 Python 的方法

图片 奥坎耶尼贡 一、说明 对于存在隐含变量的模型&#xff0c;有卡尔曼、隐马尔可夫、混合高斯模型、EM算法&#xff0c;这些模型都是建立在一种理论&#xff0c;贝叶斯推断理论&#xff0c;本篇讲授典型的贝叶斯推断原理。 二、原理综述 贝叶斯优化是一种用于黑盒函数全局&am…

【多线程】Java如何实现多线程?如何保证线程安全?如何自定义线程池?

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 多线程 Java多线程1. 进程与线程2. 多线程1&am…

Pytorch指定数据加载器使用子进程

torch.utils.data.DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue,num_workers4, pin_memoryTrue) num_workers 参数是 DataLoader 类的一个参数&#xff0c;它指定了数据加载器使用的子进程数量。通过增加 num_workers 的数量&#xff0c;可以并行地读取和预处…

多伦多 Pwn2Own 大赛首日战报!三星 Galaxy S23 被黑两次

Bleeping Computer 网站披露&#xff0c;加拿大多伦多举行的 Pwn2Own 2023 黑客大赛的第一天&#xff0c;网络安全研究人员就成功两次攻破三星 Galaxy S23。 大会现场&#xff0c;研究人员还“演示"了针对小米 13 Pro 智能手机、打印机、智能扬声器、网络附加存储 (NAS) 设…

Ubuntu卸载或重置防火墙规则

Ubuntu卸载或重置防火墙规则 1、开启防火墙后查看对应规则编号&#xff0c;然后进行删除 sudo ufw status numbered ——查看所有规则编号id sudo ufw delete 2 ——删除对应id的规则&#xff08;比如删除2号规则&#xff09; 2、按规则来删除。 例如&#xff0c;如果你使用s…

Meetup 回顾|Data Infra 研究社第十六期(含资料发布)

本文整理于上周六&#xff08;10月21日&#xff09;Data Infra 第 16 期的活动内容。本次活动由 Databend 研发工程师-王旭东为大家带来了一场主题为《Databend hash join spill 设计与实现》的分享&#xff0c;让我们一起回顾一下吧~ 以下是本次活动的相关视频、资料及文字&a…

【算法】模拟退火算法(SAA,Simulated Annealing Algorithm)

模拟退火算法&#xff08;SAA&#xff09;简介 模拟退火算法&#xff08;SAA&#xff0c;Simulated Annealing Algorithm&#xff09;的灵感来源于工艺铸造流程中的退火处理&#xff0c;随着铸造温度升高&#xff0c;分子运动趋于无序&#xff0c;徐徐冷却后&#xff0c;分子运…

【数据分享】2014-2022年我国淘宝村点位数据(Excel格式/Shp格式)

电子商务是过去一二十年我国发展最快的行业&#xff0c;其中又以淘宝为代表&#xff0c;淘宝的发展壮大带动了一大批服务淘宝电子商务的村庄&#xff0c;这些村庄被称为淘宝村&#xff01; 截至到目前&#xff0c;阿里研究院梳理并公布了2014-2022年共9个年份的淘宝村名单&…

2.AUTOSAR SWC设计概述

1.SWC概述 SWC,全称Software Components,运行在RTE之上,属于应用算法逻辑这一层,如下图: 由1.AUTOSAR的架构及方法论中我们了解到该框架的提出就是为了减少平台移植成本、加快研发效率;这也就是说在AUTOSAR框架下,SWC作为组件是需要被重用的,意味着一个…

数据预处理(超详细)

import pandas as pd import numpy as np【例5-1】使用read_csv函数读取CSV文件。 df1 pd.read_csv("sunspots.csv")#读取CSV文件到DataFrame中 print(df1.sample(5))df2 pd.read_table("sunspots.csv",sep ",")#使用read_table&#xff0c;…