操作符详解(1)

news2025/1/24 22:46:36

目录

一、操作符分类

二、算术操作符

三、位移操作符

                1、<<   左位移操作符号

                2、>>   右位移操作符

四、位操作符

                1、& ---  按位与

                2、|  ---   按位或

                3、^  ---   按位异或

         变态题

 五、赋值操作符

                  符合赋值符


一、操作符分类

操作符也被称为运算符。

算术操作符

位移操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员

二、算术操作符

+   -   *   /   %

1、除了%操作符(取模)之外,其他的几个操作符可以作用于整数和浮点数。

 2、对于/操作符,如果两个操作数都为整数,执行的是整数除法,如果向计算出小数,则除号两端至少有一个操作数是浮点数。(操作数指的是下面10和3)

 3、%操作符的两个操作数必须为整数。返回的是整数之后的余数。

三、位移操作符

<<   左位移操作符

>>   右位移操作符

移位操作符移的是补码的二进制位。

注:位移操作符的操作数只能是整数! 

 在讲之前,先为大家补充整数二进制表示形式(3种)

 

1、<<   左位移操作符号

正数的案例:

解释如下图:

左移操作符移位规则:左边丢弃,右边补0,且b打印的是原码的值。

注: a<< 1的结果是移位之后的效果,但是a的值是不变的。

负数的案例:

解释如下图所示:

对于负值,左移操作符还是左边丢弃,右边补0,且b打印的是原码的值。

所以最后-10的补码要转换成原码才是b的结果。

 注:即使是负值, a移位之后,a的值还是不变。

最后有没有发现,左移有×2的效果。

2、>>   右位移操作符

 首先右移运算分为两种:

①逻辑位移(不讲,和左移操作符差不多)

        左边补0,右边丢弃

②**算术位移(常见)

        左边用原该值的符号位填充,右边丢弃

注:逻辑位移算术位移取决于编辑器,一般都是算术位移。

②**算术位移

解释如下图所示: 

 

警告⚠:

对于位移运算符,不要移动负数位,这个是标志未定义的。

四、位操作符

位操作符有

& ---  按位与

|  ---   按位或

^  ---   按位异或

注:它们的操作数必须是整数,同时也是针对二进制位进行计算的。

1、& ---  按位与

计算规则:对应的二进制位上,有0则为0,两个同时为1,才为1。

解析:首先a&b一定是二进制位进行计算,也就是存到内存中的补码进行计算,a的补码为00000000000000000000000000000011,b的补码为11111111111111111111111111111011,根据按位与的计算规则,按位与结果(补码):00000000000000000000000000000011,最后还要转化成原码,由于正数的原码、反码、补码都是一样的,所以最后打印结果为3。

2、|  ---   按位或

计算规则:对应的二进制位上,有1则为1,两个同时为0,才为0。

解析:首先a | b还是二进制位进行计算,a的补码为00000000000000000000000000000011,b的补码为11111111111111111111111111111011,根据按位或的计算规则,按位与结果(补码):11111111111111111111111111111011,最后还要转化成原码,但是由于按位或结果就是b的补码,所以最后打印结果为-5。

3、^  ---   按位异或

计算规则:对应的二进制位,相同为0,相异为1。

解析:首先a ^ b还是二进制位进行计算,a的补码为00000000000000000000000000000011,b的补码为11111111111111111111111111111011,根据按位异或的计算规则,按位与结果(补码):11111111111111111111111111111000,最后还是要转化成原码,原码:10000000000000000000000000001000(1*2的3次方),所以结果为-8


接下来,插播一道变态题

要求:不能创建临时变量(第三个变量),实现两个整数的交换。

首先假设可以创建临时变量:

那不创建临时变量应该怎么做呢?接着往下看

但是这个方法有一个缺陷,如果a和b的数字太大的时候,超出范围就会溢出。

那应该怎么办呢?接着往下看

解析:

异或操作符的缺点

1、可读性差

2、效率不如使用临时变量的方法

3、异或只能针对整数的交换


 五、赋值操作符

赋值操作符是一个很棒的操作符,它可以让你得到一个你之前不满意的值,也就是你可以给自己重新赋值。

int weight = 120; //初始化赋值
weight = 130; //不满意就赋值

//赋值操作符还能连续使用
int a = 10;
int x = 20;
int y = 30;
a = x = y + 1; //连续赋值(赋值顺序从右往左)

//或者还能这么写(好的写法)
x = y + 1;
a = x;
//这样的写法是不是更加容易调试

符合赋值符

目的就是为了简化代码。

+=     a+=5实际上就是a=a+5

-=      a-=5实际上就是a=a-5

*=      a*=5实际上就是a=a*5

/=      a/=5实际上就是a=a/5

%=    a%=5实际上就是a=a%5

>>=    b = b>>1可以写成b>>=1

<<=    b = b<<1可以写成b<<=1

&=     b =  b & 1可以写成b&= 1

|=      b =  b | 1可以写成b|= 1

^=    b =  b ^ 1可以写成b^= 1

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

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

相关文章

小程序注册安装以及新手快速入门教程

一、注册并安装微信小程序 1.打开 https&#xff1a;//mp.weixin.qq.com/ 网址&#xff0c;点击立即注册即可进入小程序开发账号的注册流程&#xff0c;注册的账号类型选择小程序。 2.根据注册要求注册&#xff0c;发送邮箱信息&#xff0c;接收到微信团队发送的邮箱信息后&am…

水泥行业工业互联网平台(CCPS)解决方案

水泥行业经过过去十年的发展和调整&#xff0c;基本实现了集团化。集团管控当前面临的主要问题是数字的分散化和碎片化&#xff0c;建设工业互联网是新时期加强集团管控的必经之路。 CCPS平台优势 1.融合SOA理念的架构平台和系统框架。具有跨平台、易维护、可集成、可扩展、分…

Spark - 介绍及使用 Scala、Java、Python 三种语言演示

一、Spark Apache Spark 是一个快速的&#xff0c;多用途的集群计算系统&#xff0c; 相对于 Hadoop MapReduce 将中间结果保存在磁盘中&#xff0c; Spark 使用了内存保存中间结果&#xff0c; 能在数据尚未写入硬盘时在内存中进行运算。 Spark 只是一个计算框架, 不像 Hadoo…

几率波量子雷达/反事实量子通信

物理学中有哪些不可思议&#xff08;违背直觉&#xff09;的事实&#xff1f; - 知乎 利用粒子的双缝干涉原理&#xff0c;可以在物体偏离的情况下&#xff0c;探测到物体。 我们不需要用光子照射物体&#xff0c;就能感知到是否有物体存在。 这是什么意思&#xff1f; 这就…

3516DV300 推流

3516DV300 推流 基于ffmpeg将编码后的264文件&#xff08;或者直接推流&#xff09;推流出去&#xff0c;使用ffplay进行播放和验证。 ffmpeg版本&#xff1a;N-109124-g63db6a02a7 RELEASE&#xff1a;5.1.git ffmpeg udp文件推流 命令行 这里用的是开发板编码出的码流&…

MIT 6.S081 Operating System Lecture5 (随意的笔记)

系列文章目录 文章目录系列文章目录TrapsA questionsyscallTraps 用户空间和内核空间的切换通常被称为 trap example: shwrite()ecall(); //write 通过 ecall() 指令执行系统调用之后跳转执行到 usertrap 如下图的执行过程。最终sys_write将要显示的数据输出到 console 上 …

【Java 设计模式】创建者模式 之原型模式

原型模式1 定义2 角色3 三好学生案例3.1 浅克隆实现3.1.1 浅克隆定义3.1.2 类图3.1.3 实现3.2 深克隆实现3.2.1 深克隆定义3.2.2 实现1 定义 将一个已经创建好的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 2 角色 抽象原型类&#xff1…

Chrome的使用技巧

1. 请求重发 F12 -> Network -> Replay XHR 2. 修改请求参数后重发 F12 -> Network -> Copy -> Copy as fetch 然后在 Console 控制台 ctrl + v ,而后就可以对请求的参数进行编辑,回车就会重更新请求 再在 Network 就可以看到这个请求了 3. 复制对象 (…

echarts入门到实战

官网地址&#xff1a;Apache ECharts 前言 我们应该经常看到或听到”数据可视化“这个词&#xff0c;他其实就是将数据通过各种图表更加直观的展现变化趋势&#xff0c;对比&#xff0c;峰值等等。数据可视化也是未来的趋势。 作为前端程序员&#xff0c;数据可视化也是我们必…

多任务全景感知YOLOPv2:目标检测、freespace、车道线

今年年初出了一片《端到端的多任务感知网络HybridNet&#xff0c;性能优于YOLOP》&#xff0c;论文 HybridNets: End2End Perception Network&#xff0c;代码已开源&#xff0c;在目标检测、车道线、freespace的多任务感知任务上性能优于YOLOP&#xff0c;取得了新SOTA。视频效…

大厂Java面试必备面试题:基础语法-数据类型-编码-注释-运算符-关键字-流程控制语句

基础语法 数据类型 Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类 型&#xff0c;在内存中分配了不同 大小的内存空间。 分类&#xff1a; 基本数据类型 Java源代码---->编译器---->jvm可执行的Java字…

如果Controller里有私有的方法,能成功访问吗?

背景 写代码的时候&#xff0c;复制粘贴的时候&#xff0c;没注意到方法的属性&#xff0c;就导致了Controller里有了一个私有的方法&#xff0c;然后访问这个接口的时候就报了空指针异常&#xff0c;找了好久才找到是这个原因。 来看一个例子 Service public class MyServi…

Netty面试经典问题

目录 Netty是怎么实现高性能设计的&#xff1f; 简单介绍一下对于Netty的了解 Netty的高性能表现在哪些方面 介绍一下Java中的几种IO模型 一个通俗例子读懂BIO、NIO、AIO BIO与NIO的区别 Netty的线程模型 什么是零拷贝 Netty中的模块组件&#xff1a; Netty 中有哪种…

Linux rpm方式安装 MYSQL8.0

1.卸载原有的mysql 数据库 1&#xff09;查找安装的mysql软件包和依赖包&#xff1a; rpm -pa | grep mysql 显示结果&#xff1a; mysql80-community-release-el7-1.noarch mysql-community-server-8.0.11-1.el7.x86_64 mysql-community-common-8.0.11-1.el7.x86_64 mysql…

ReLU,Sigmoid,Tanh,softmax【基础知识总结】

一、ReLU&#xff08;Rectified Linear Activation Function&#xff09;1、优点2、缺点补充二、Sigmoid1、优点2、缺点三、Tanh四、Sigmoid 和 Tanh 激活函数的局限性五、softmax&#xff08;待补充&#xff09;激活函数的引入是为了增加神经网络模型的非线性&#xff0c;没有…

【机器学习入门项目10例】(九):聚类算法用于降维,KMeans的矢量量化应用(图片压缩)

🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 + 数据集 + 完整源码🐶🦜【机器学习项目实战10例目录】项目详解 + 数据集 +

万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来

大数据时代&#xff0c;无人不知Google的“三驾马车”。“三驾马车”指的是Google发布的三篇论文&#xff0c;介绍了Google在大规模数据存储与计算方向的工程实践&#xff0c;奠定了业界大规模分布式存储系统的理论基础&#xff0c;如今市场上流行的几款国产数据库都有参考这三…

Fama-French三因子和五因子模型和Stata代码(内附原始数据)

一、Fama-French三因子模型数据和Stata代码&#xff08;2000-2020年&#xff09; 1、数据来源&#xff1a;原始数据在分享文件中 2、时间跨度&#xff1a;2000-2020年 3、区域范围&#xff1a;全国 5、原始数据&#xff1a; 4、指标说明&#xff1a; 部分指标如下&#xff…

Linux虚拟机的克隆

文章目录&#x1f68f; Linux虚拟机的克隆&#x1f680; 克隆虚拟机&#x1f6ac; 1、虚拟机在未开启的状态下&#x1f6ac; 2、选择创建完整克隆&#x1f6ac; 3、选择虚拟机的名称和位置&#x1f684; 修改 克隆虚拟机的设置&#x1f6ac; 1、mac地址&#x1f6ac; 2、主机名…

RocketMQ安装部署

RocketMQ的物理部署结构图如下&#xff1a; Producer和Consumer对应的是我们的应用程序&#xff0c;多个NameServer实例组成集群&#xff0c;但相互独立&#xff0c;没有信息交换&#xff0c;所以对于NameServer来说部署两个或两个以上即可保证高可用&#xff0c;对于Broker来…