逻辑运算符、位运算符、移位运算符、三目运算符、运算符的优先级

2023-11-16

一、逻辑运算符 :逻辑运算符的作用是用于连接布尔表达式的。
1、& (与,并且)
规律: 只有左右变量同时为true,那么结果才是true,否则就false。

2、| (或,或者)
规律: 只要两边的布尔表达式有一边为true,那么结果就为true,只有两边同时为false 的时候,结果才是false。

3、^ (异或)
规律: 只要两边的布尔表达式结果不一致,那么结果就为true,如果左右两边的布尔表达式一致,那么就为false。

4、! (非)

5、&& (短路与\双与)
短路与和单与符号的相同与不同点:
1)相同点: 运算的结果是一样的。
2)不同点: 使用短路与的时候,如果左边的布尔表达式为false,则不会在运算右边的布尔表达式,从而提高了效率。使用单与的时候,即使发现左边的布尔表达式为false,还是会运算右边的布尔表达式的。
那么有这样一个问题:单与的效率高于双与?
错,只有左边的布尔表达式为false时,双与的效率才要高于单与的。

6、|| (短路或\双或)
短路或与单或的相同点与不同点:
1)相同点:运算的结果是一致的。
2)不同点:使用短路或的时候,当发现左边的布尔表达式为true时,则不会运算右边的布尔表达式。使用单或的时候发现左边的布尔表达式为true,还是会运算右边布尔表达式。

二、位运算符:位运算符就是直接操作二进制位的,这样效率可能会高一些,因为计算机就是通过二进制对数据进行存取的。
1、位运算符与逻辑运算符的区别:
用于int类型数据时,就是位运算符。用于布尔表达式时就是逻辑运算符。

2、& (与)

3、| (或)

4、^ (异或)
规律: 如果操作数A连续异或同一个操作数两次,那么结果还是操作数A。

5、~ (取反)
举例:

分析:

6、应用:使用异或对图片数据进行加密。

import java.io.*;
class ImageTest{
    public static void main(String[] args)  throws Exception{
        //找到图片文件
        File inFile = new File("e:\\图片.jpg");
        File outFile = new File("e:\\加密后的图片.jpg");

        //建立数据通道,让图片的二进制数据流入
        FileInputStream input = new FileInputStream(inFile);
        FileOutputStream output = new FileOutputStream(outFile);
        //边读,边把读到的数据异或一个数据,再把这个数据写出

        int content = 0; //该变量是用于存储读取到的数据

        // 如果没有到文件的末尾,那么继续读取数据,读取到的数据已经存储到content变量中了。
        while((content = input.read())!=-1){  
            //加密方式与12做异或运算
            output.write(content^12);       
        }

        //关闭资源
        output.close();
        input.close();
    }
}

7、位运算符可能会出现的笔试题目:
1)交换两个变量的值,不准出现第三方变量。

class Demo1{
    public static void main(String[] args){
        int a = 3;
        int b = 5;

        //方式1:定义第三方变量。
        int temp = a;   //3 
        a = b;          //a = 5 
        b = temp; 

        //方式2:相加法, 缺点:两个int类型的数据相加,有可能会出现超出int的表示范围。
        a = a+b;    // a =8
        b = a-b;    //b = 8 - 5 = 3
        a = a-b;    // a = 8 - 3 = 5

        //方式3: 可以使用异或。 缺点: 逻辑不清晰。
        a = a^b;  // a = 3^5
        b = a^b;  // b = (3^5)^5 = 3
        a = a^b; //  a = (3^5)^3 = 5    注意:(3^5)和(5^3)是一样的 
    }
}

2)取出一个二进制数据的指定位数。要求读取该二进制数据的低4位
答:

三、移位运算符(也是对二进制数进行操作的):
1、<<(左移)
规律:一个操作数进行左移运算的时候,结果就是等于操作数乘以2的n次方,n就是左移 的位数.
3<<1 = 3 *2(1) = 6;
3<<2 = 3*2(2) = 12
3<<3 = 3*2(3) = 24

2、>>(右移)
规律:一个操作数在做右移运算的时候,实际上就是等于该操作数除以2的n次方,n就是右移的位数。
3>>1 = 3 / 2(1) = 1
3>>2 = 3 / 2(2) = 0

3、>>>(无符号右移) :
无符号右移与右移的区别:进行右移运算的时候,如果操作数是一个正数,那么左边的空缺位使用0补,如果操作数是一个负数,那么左边的空缺位使用1补。而使用无符号右移的时候,不管是正数还是负数都统一使用0补。

4、没有无符号左移:原因不用解释了吧。

5、笔试题目:使用最高的效率算出2乘以8的结果。
答:2<<3 = 2*2(3) = 16; 因为只有一个操作数(2),所以效率相对较高。

四、三元运算符(三目运算符)
1、格式:布尔表达式?值1:值2 ;
2、三元运算符要注意的细节:
使用三元运算符的时候,一定要使用该表达式返回的结果,或者是定义一个变量接收该表达式返回的结果。
说简单点就是不能让还有三目运算符的语句自成一句,例如:age>=18?"成年人":"未成年人";,这种报错。
应该是:result = (age>=18?"成年人":"未成年人");
或是:System.out.println(age>=18?"成年人":"未成年人");

五、运算符的优先级:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逻辑运算符、位运算符、移位运算符、三目运算符、运算符的优先级 的相关文章

随机推荐

  • Linux常用操作命令

    1 ls 列出当前目录中的文件 2 pwd 列出当前目录的绝对路径 3 cd 切换当前目录 4 touch 创建空文件 5 cat 读取文件 6 echo 写文件 7 mkdir 创建目录 文件夹 make directory 8 rm 删
  • WAMP/DVWA/sqli-labs 搭建

    资料下载 Win7x64 ed2k file cn windows 7 enterprise with sp1 x64 dvd u 677685 iso 3265574912 E9DB2607EA3B3540F3FE2E388F8C53C4
  • 自定义类型【结构体+枚举+联合】详解【C语言的进阶结构体】

    进阶结构体目录 前言 结构体 枚举 联合 共用体 结构体 结构体的内存对齐 结构体的内存对齐规则 试题讲解 为什么存在内存对齐 修改默认对齐数 结构体实现位段 位段的填充 可移植性 什么是位段 位段的内存分配 位段的跨平台问题 枚举 枚举的
  • 在vue项目中echarts父子组件异步传值,解决数据更新,echarts页面不更新问题

    在使用echarts进行数据展示的时候 遇到了一个问题 echarts图表是作为子组件进行展示的 需要父组件发送请求并获取到返回数据后再传给子组件进行数据展示 但是由于子组件比父组件先渲染 所以就会导致子组件获取不到父组件传递的数据 针对这
  • python 建立MYSQL 数据库链接

    usr bin env python3 coding utf 8 name kang 功能 数据库连接模块 用于建立数据库连接和关闭 from pymysql import from config conf import class DBU
  • DRB-GAN: A Dynamic ResBlock Generative Adversarial Network for Artistic Style Transfer

    摘要 提出一种用于艺术风格迁移的动态 ResBlock 生成对抗网络 DRB GAN 风格码被建模为连接风格编码网络和迁移网络的动态 ResBlocks 的共享参数 在编码网络中 融入了风格的类感知注意机制 在迁移网络中 多个 Dynami
  • gitee使用教程,创建项目仓库并上传代码

    一 关于gitee gitee 中文名 码云 原名 Git OSC 是开源中国推出的基于git的代码托管服务 国内访问GitHub速度比较慢 如果想托管自己的代码到云端 gitee是个不错的选择 华为的鸿蒙2 0源码也是放在gitee上的
  • vscode离线安装并扩展第三方库

    1 下载好anaconda vscode vscode扩展包 vscode和扩展包最好同一天下载 因为我第一次用的是一个月前下载的vscode安装 然后扩展包安装时出现了不兼容的情况 我又重新下载了一次最新的vscode 不兼容情况解决啦
  • shardingsphere-jdbc配置常见问题,Type is required

    Type is requied 错误 shardingsphere不能写成sharing sphere 将datasource写成了database names写成name driver class name不能写成driverClassN
  • keil5中找不到本应该有的芯片

    问题描述 从网上下载了一份他人的keil工程 发现打开后无法找到对应芯片 确定已下载该芯片的器件包 如图1所示 打开工程设置后仍无法找到芯片 但新建工程时有 如图2所示 图1 打开工程时显示 图2 打开工程设置界面 解决方法 新建一个所需芯
  • 十万火急的数据采集项目,爬虫代理测试对比

    十万火急的数据采集项目 爬虫代理测试对比 开春上班第一天 正在喝咖啡发神 老大开会宣布公司要重点投入数据爬取和分析业务 为客户做业务做数据支撑要求达到日均1000W级别的数据采集量 让我做一下技术规划 赶紧找出了一年前爬虫框架跑了一下电商数
  • 互联网公司常见面试算法题

    1 假设淘宝一天有5亿条成交数据 求出销量最高的100个商品并给出算法的时间复杂度 先用哈希 统计每个商品的成交次数 然后再用在N个数中找出前K大个数的方法找出成交次数最多的前100个商品 优化方法 可以把5亿个数据分组存放 比如放在500
  • java 直接读取zip文件和文件内容

    不解压zip文件 直接读取zip包内的文件夹以及文件内容 zip包内内容 代码如下 import java io import java nio charset Charset import java util zip ZipEntry i
  • 我总结了大龄程序员未来最好得3个出路

    所谓出路 就是继续下去的方法 30岁的程序员通常要同时面临技术瓶颈 家庭负担以及贷款压力 如果这个时候没有能够坐到一个理想的位置 或者是积累一些资源与人脉 那么其实压力是很大的 那么这个时候还有出路吗 当然有 其实30岁还属于青年 离中年还
  • 微信小程序,图像识别源码

    目录 前言 百度端配置信息 小程序中代码 结语 智能识图小程序源码下载路径 https pan baidu com s 1OGE7vhogS7L7nn0JIFPVWw 提取码 8ze9 前言 基于近期的工作内容关系 在查询一些资料的同时 在
  • hadoop环境搭建之制作本地yum源

    因为需要的三个安装包都在国外服务器 切最大的超过5G 如果不是对网络特别有自信 最好确认完整下载后制作本地yum源安装 推荐 一 安装 Apache HTTP 服务器 直接yum安装即可 yum install httpd 因为前面已经关闭
  • 华为OD,阿里巴巴找黄金宝箱(Ⅱ)(Java实现)

    Java代码 public class Demo2 public static void main String args Scanner scanner new Scanner System in Map
  • 【粉丝问答19】为啥变量没初始化就用了?那是宏定义啊!

    目录 一 问题 二 分析 三 宏定义的注意点 1 只占用编译时间 2 宏替换发生时机 3 预处理包括哪些工作 四 如何快速展开复杂的宏定义 第一步 第二步 五 练习 六 15个经典宏定义小例子 一 问题 为啥内核有的变量没有初始化就敢直接使
  • node.js的学习

    nodejs 官网 Node js nodejs org nodejs中代码由V8引擎解析 内置fs http等api 不包含dom和bom 不可以在nodejs中使用bom和dom nodejs可以做什么 基于Express框架 可以快速
  • 逻辑运算符、位运算符、移位运算符、三目运算符、运算符的优先级

    一 逻辑运算符 逻辑运算符的作用是用于连接布尔表达式的 1 与 并且 规律 只有左右变量同时为true 那么结果才是true 否则就false 2 或 或者 规律 只要两边的布尔表达式有一边为true 那么结果就为true 只有两边同时为f