Javaの运算符 Day5

news2024/9/21 4:29:04

1. 算数运算符

1.1 二元运算符(两个操作数)的算数运算符

操作符描述
+求和
-求差
*求积
/求商
%求余

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 20;
        int b = 12;

        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b);
        System.out.println(a / b);
        System.out.println(a % b);
    }
}

运行结果
在这里插入图片描述

  • a / b = 1.67 但是a是int b也是int 结果也是int,所以是等于1
  • a % b是取余,也就是取余数 20 / 12的余数是8,所以是8

1.2 一元运算符(一个操作数)的算数运算

操作符描述
++递增,变量值+1
递减,变量值-1

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 10;
        a++;
        System.out.println("a = " + a);
        int b = 20;
        b++;
        System.out.println("b = " + b);

    }
}

运行结果
在这里插入图片描述

运行结果都一样,此时我们可以得出一个结论,当递增递减单独作为一条语句时,++在前在后,运行结果都不变

是不是代表++在前面和后面都一样呢 我们可以在看代码

public class TestOperator {
    public static void main(String[] args) {
        int result = 0;
        int a = 10;
        result = a++;
        System.out.println("result = " + result);
        System.out.println("a = " + a);
        int b = 10;
        result = ++b;
        System.out.println("result = " + result);
        System.out.println("b = " + b);
    }
}

运行结果
在这里插入图片描述

可以看到,此时结果改变了,可以得出结论是,如果递增递减运算符不作为单独的语句时,那么++、–在前在后就会有区别

  • 如果++、–在前,则先执行++、–,再去执行其他
  • 如果++、–在后,则先执行其他,再执行++、–

2. 赋值运算符

操作符描述
=直接赋值
+=求和后赋值
-=求差后赋值
*=求积后赋值
/=求商后赋值
%=求余后赋值

​ 代码举例:

public class TestOperator {
    public static void main(String[] args) {
        int a = 10;
        System.out.println(a);
        a += 10;
        System.out.println(a);
        a -= 10;
        System.out.println(a);
        a *= 10;
        System.out.println(a);
        a /= 10;
        System.out.println(a);
        a %= 10;
        System.out.println(a);
    }
}

运行结果:
在这里插入图片描述

与完整表达式的区别

public class TestOperator {
    public static void main(String[] args) {
        short a = 20;
        a += 10;	//JVM会实现隐式的类型转换

        short b = 20;
        b = (short)(b + 10);

        System.out.println(a);
        System.out.println(b);
    }
}

如果我们不强制类型转换short
在这里插入图片描述

此时可以发现这里出现了报错,原因是类型不匹配,而为什么+=没问题呢,原因是因为JVM会帮我们实现隐式的类型转换,而完整的表达式不会,需要我们手动的进行强制类型转换

3. 关系运算符

关系运算符就是两个操作数进行比较,结果是布尔类型

表示两个操作数之间或者两个表达式之间的关系是否成立

操作符描述
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 88;
        int b = 99;
        System.out.println(a > b);
        System.out.println(a < b);
        System.out.println(a >= b);
        System.out.println(a <= b);
        System.out.println(a == b);
        System.out.println(a != b);
    }
}	

运行结果
在这里插入图片描述

4. 逻辑运算符

两个boolean类型的操作数或表达式进行逻辑比较

  • 关系运算符的结果就是boolean类型,所以我们可以用关系运算来进行逻辑比较
操作符语义描述
&逻辑与(并且)要求两个或者多个条件同时成立 则最终结果为true
&&短路与(并且)要求两个或者多个条件同时成立 则最终结果为true
|逻辑或(或者)要求两个或者多个条件 至少有一个成立 则最终结果为true
||短路或(或者)要求两个或者多个条件 至少有一个成立 则最终结果为true
!非(取反)真即是假,假即是真

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 88;
        int b = 99;
        int c = 111;

        System.out.println(a > b && b < c);
        System.out.println(a > b & b < c);

        System.out.println(a < b && b < c);
        System.out.println(a < b & b < c);

        System.out.println("----------------------------");

        System.out.println(a > b || b < c);
        System.out.println(a > b | b < c);

        System.out.println(a > b || b > c);
        System.out.println(a > b | b > c);

        System.out.println("----------------------------");

        System.out.println(!(a < b));
        System.out.println(!(a > b));
    }
}

运行结果
在这里插入图片描述

从上图可知,&&&的运算结果是相同的,|||的运算结果也是相同的,那为什么不直接使用一个呢

那是因为&&短路效果,所以他叫做短路,&&不仅有&效果之外,还能有短路的效果,||和|的关系亦然

代码举例(用逻辑或举例)

public class TestOperator {
    public static void main(String[] args) {
        int a = 10;
        int b = 11;
        int c = 13;

        System.out.println(a > b & ++b > c);
        System.out.println(b);
        b = 11;	//初始回原值便于观察
        System.out.println(a > b && ++b > c);
        System.out.println(b);
    }
}

运行结果
在这里插入图片描述

可以看到逻辑与的b值是变了的,而短路与的b值没变,得出结论

  • 逻辑与他没有短路效果,即使第一个条件(a>b)不成立,也会继续执行判断第二个条件是否成立,即使第一个条件已经不满足逻辑与的要求
  • 短路与有短路效果,当第一个条件(a>b)不成立,已经不满足逻辑与的要求,则后续的条件不执行,所以b值不变

逻辑或的判断同理,这里不具体阐述

5. 三目运算符

根据布尔表达式的结果选择执行结果1或者结果2,同时可以把结果1or结果2赋值给变量

操作符语义描述
? :布尔表达式?结果1:结果2当表达式结果为真,则结果1
当表达式结果为假,则结果2

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 0;

        c = a > b ? a : b;
        System.out.println(c);
    }
}

运行结果
在这里插入图片描述

6. 位运算符

位运算是对整数的二进制进行运算

运算符运算作用
<<左移左移几位表示乘以2的几次方,可能会出现负数
>>右移右移几位表示除以2的几次方
如果最高位是1则空缺位补1
如果最高位是0则空缺位补0
>>>无符号右移不管最高位是0还是1 空缺位统一以0填充 最终结果都是正数
&与运算两个相同二进制位进行与运算 两者为1则结果为1 一个为0则结果为0
|或运算两个相同二进制位进行或运算 一个为1则结果为1 两者为0则结果为0
^异或运算两个相同二进制位进行异或运算 相同为0 相异为1
~取反运算包括符号位取反 0取反为1 1取反为0

6.1 左移运算符

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a << 1);
        System.out.println(a << 2);
        System.out.println(a << 3);
        System.out.println(a << 31);
    }
}

运行结果
在这里插入图片描述

得出结论

  • 左移几位表示乘以2的几次方,可能会出现负数

6.2 右移运算符

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 8;
        System.out.println(a >> 1);
        System.out.println(a >> 2);
        int b = -8;
        System.out.println(b >> 1);
        System.out.println(b >> 2);
    }
}

  • 假设内存是1个字节8个位进行画图,实际上int有32个位,为了方便演示则使用8位
  • a >> 1
    在这里插入图片描述

整体往右移,右移完后,右边的0抛弃,左边补上0

  • b >> 1
    在这里插入图片描述

这是-8的补码,转换为补码之后,对于左边为什么是补1就会有很直观的理解

整体往右移,右移完后,右边的0抛弃,左边补上1

得出结论

  • 右移几位表示除以2的几次方
  • 如果最高位是1则空缺位补1
  • 如果最高位是0则空缺位补0

6.3 无符号右移

假设内存是1个字节8个位进行画图,实际上int有32个位,为了方便演示则使用8位,为什么不用byte a = -8呢,这样会不会范围就是127以内了,其实并不是,上一篇文章提到自动类型转换,因为-8是int类型,赋给了a之后会自动提升为int类型,所以他的取值范围是int的取值范围,而不是byte的取值范围,所以我们只能假设,或者是强制类型转换为byte类型

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = -8;
        System.out.println(a >>> 1);
        System.out.println(a >>> 2);
    }
}

运行结果
在这里插入图片描述

演示
在这里插入图片描述

int有32位,也就是32个位整体往右移一位,最右边的0抛弃,最高位补0,所以a>>>1的结果是2147483644

6.4 与运算符

代码举例

package com.csdn.code.day3;

public class TestOperator {
    public static void main(String[] args) {
        int a = 12;
        int b = 24;

        System.out.println(a & b);
    }
}

运行结果
在这里插入图片描述

两个相同二进制位进行与运算 两者为1则结果为1 一个为0则结果为0
在这里插入图片描述

6.5 或运算符

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 12;
        int b = 24;

        System.out.println(a | b);
    }
}

运行结果
在这里插入图片描述

两个相同二进制位进行或运算 一个为1则结果为1 两者为0则结果为0
在这里插入图片描述

6.6 异或运算符

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 12;
        int b = 24;

        System.out.println(a ^ b);
    }
}

运行结果
在这里插入图片描述

两个相同二进制位进行异或运算 相同为0 相异为1
在这里插入图片描述

6.7 取反运算符

代码举例

public class TestOperator {
    public static void main(String[] args) {
        int a = 12;
        int b = -8;

        System.out.println(~a);
        System.out.println(~b);
    }
}

运行结果
在这里插入图片描述

以-8为例(包括符号位取反 0取反为1 1取反为0)
在这里插入图片描述

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

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

相关文章

【算法】队列与BFS

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;N 叉树的层序遍历 .1- 题目解析 .2- 代码编写 2&#xff09;二叉树的锯齿形层序遍历 .1- 题目解析 .2- 代码编写 3&#xff09;二叉树最大宽度 .1- 题目解析 .2- 代码编写 4&#xf…

UART协议

目录 一、概述二、帧格式起始位数据位奇偶校验位停止位 三、数据传输过程四、串行通信接口RS232RS422RS485 五、UART环回程序设计 参考&#xff1a;正点原子FPGA开发指南 一、概述 UART&#xff08;通用异步收发器&#xff09;是一种异步、全双工的串行通信总线&#xff0c;在…

CGAL 从DSM到DTM holefilling remeshing

CGAL 从DSM到DTM holefilling & remeshing 上一节简单地删除被建筑物覆盖的大片区域中的顶点会导致大的Delaunay三角面&#xff0c;从而得到了较差的DTM&#xff0c;所以一个额外的步骤可以帮助产生更好的形状网格:删除大于阈值的面&#xff0c;并用孔洞填充算法进行三角化…

C++速通LeetCode简单第17题-爬楼梯

思路要点&#xff1a;将问题转化为求斐波那契数列的第n项&#xff0c;然后迭代。 思路分析&#xff1a;最后一次爬的阶数不是1就是2&#xff0c;假设爬n阶的方法数是f(n)&#xff0c;假设最后一次爬1阶&#xff0c;那么爬前面的 n-1阶的方法数是f(n-1)&#xff1b;假设最后一次…

力扣题解2848

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;简单&#xff09;&#xff1a; 与车相交的点 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i&#xff0c;nums[i] [starti, endi] &…

熵权法详细讲解+Python代码实现

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

大数据新视界 --大数据大厂之 Cassandra 分布式数据库:高可用数据存储的新选择

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

基于单片机的超声波液位检测系统(论文+源码)

1总体设计 本课题为基于单片机的超声波液位检测系统的设计&#xff0c;系统的结构框图如图2.1所示。其中包括了按键模块&#xff0c;温度检测模块&#xff0c;超声波液位检测模块&#xff0c;显示模块&#xff0c;蜂鸣器等器件设备。其中&#xff0c;采用STC89C52单片机作为主…

2.5 Trigger源码分析 -- ant-design-vue系列

Trigger源码分析 – ant-design-vue系列 1 概述 源码地址&#xff1a; https://github.com/vueComponent/ant-design-vue/blob/main/components/vc-trigger/Trigger.tsx 在源码的实现中&#xff0c;Trigger组件主要有两个作用&#xff1a; 使用Portal组件&#xff0c;把Pop…

构建响应式 Web 应用:Vue.js 基础指南

构建响应式 Web 应用&#xff1a;Vue.js 基础指南 一 . Vue 的介绍1.1 介绍1.2 好处1.3 特点 二 . Vue 的快速入门2.1 案例 1 : 快速搭建 Vue 的运行环境 , 在 div 视图中获取 Vue 中的数据2.2 案例 2 : 点击按钮执行 vue 中的函数输出 vue 中 data 的数据2.3 小结 三 . Vue 常…

Leetcode3282. 到达数组末尾的最大得分

Every day a Leetcode 题目来源&#xff1a;3282. 到达数组末尾的最大得分 解法1&#xff1a;动态规划 代码&#xff1a; class Solution { public:long long findMaximumScore(vector<int>& nums) {if (nums.size() < 1) return 0LL;int n nums.size();vect…

JavaScript高级——循环遍历加监听

本文分享到这里&#xff0c;欢迎大家评论区相互讨论学习&#xff0c;下一篇继续分享JavaScript高级学习中的闭包的内容。

linux进程间通信——学习与应用命名管道, 日志程序的使用与实现

前言&#xff1a;本节主要讲解linux进程间通信里面的命名管道&#xff0c; 命名管道和我们学过的匿名管道是类似的。 博主将会带着友友们先看一下原理&#xff0c; 然后就会着手使用以下命名管道是怎么使用的。 最后我们还会试着引入日志系统&#xff0c; 我们从本节开始就会引…

npm 安装 与 切换 淘宝镜像

一、镜像源 npm默认镜像源是国外的&#xff0c;安装依赖速度较慢&#xff0c;使用国内的镜像源速度会快一些。 1、设置淘宝镜像源&#xff1a; #最新地址 淘宝 NPM 镜像站喊你切换新域名啦! npm config set registry https://registry.npm.taobao.org&#xff08;弃用了&…

网站采用H5+CSS3开发的优势和劣势

在现代网站开发中&#xff0c;HTML5和CSS3的结合使用已经成为一种趋势。以下是其优势和劣势的介绍&#xff1a; 优势 增强的多媒体支持&#xff1a;HTML5引入了新的标签&#xff0c;使开发者能够轻松嵌入音频、视频和图形&#xff0c;无需依赖第三方插件如Flash。这大大简化了…

【AI大模型】ChatGPT模型原理介绍(下)

目录 &#x1f354; GPT-3介绍 1.1 GPT-3模型架构 1.2 GPT-3训练核心思想 1.3 GPT-3数据集 1.4 GPT-3模型的特点 1.5 GPT-3模型总结 &#x1f354; ChatGPT介绍 2.1 ChatGPT原理 2.2 什么是强化学习 2.3 ChatGPT强化学习步骤 2.4 监督调优模型 2.5 训练奖励模型 2.…

基于单片机的风机故障检测装置的设计与实现(论文+源码)

1 系统总体设计方案 通过对风机故障检测装置的设计与实现的需求、可行性进行分析&#xff0c;本设计风机故障检测装置的设计与实现的系统总体架构设计如图2-1所示&#xff0c;系统风机故障检测装置采用STM32F103单片机作为控制器&#xff0c;并通过DS18B20温度传感器、ACS712电…

macOS使用brew安装并配置python环境

1.确认已安装brew环境,如没有安装,参考: macOS系统Homebrew工具安装及使用-CSDN博客 2.安装python python安装成功 3.添加pip路径到/etc/paths 4.查看python与pip默认安装版本

【leetcode】树形结构习题

二叉树的前序遍历 返回结果&#xff1a;[‘1’, ‘2’, ‘4’, ‘5’, ‘3’, ‘6’, ‘7’] 144.二叉树的前序遍历 - 迭代算法 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,…

git 更换远程地址的方法

需要将正在开发的代码远程地址改成新的地址&#xff0c;通过查询发现有三个方法可以实现&#xff0c;特此记录。具体方法如下&#xff1a; &#xff08;1&#xff09;通过命令直接修改远程仓库地址 git remote 查看所有远程仓库git remote xxx 查看指定远程仓库地址git remote…