第03章 运算符

news2024/11/26 10:38:11

运算符介绍

在这里插入图片描述

运算符是一种特殊的符号,用以表示数据间的运算、赋值和比较等。

算数运算符

算数运算符用于对数值型变量间的计算。

注意:图片中最后一行,字符串相加的结果中间没有空格,这个课件错误❌。

除法[ / ]

System.out.println(10 / 4); // 从数学上看是2.5,在java中是2。 int -> int
System.out.println(10.0 / 4); // 数据类型为double 小数,输出是2.5  double -> double
double d = 10 / 4;   // 运算为:2 -- > 2.0  int -> double精度提升
System.out.println(d);

取模(取余)

//取余
System.out.println(10 % 3);  // 1   10 / 3 = 3 余 1
System.out.println(-10 % 3); // -1  -10 / 3 = -3 余 -1
System.out.println(10 % -3); // 1   10 / -3 = -3 余 1
System.out.println(-10 % -3); // -1   -10 / -3 = -3 余 -1

++ 的使用

当作为独立的语句使用时,前++ 和 后++ 都完全等价于 i= i+ 1;

// ++的使用
int i = 10;
i++;   // i = i + 1;
++i;   // i = i + 1;
System.out.println(i);    // 输出为12

当作为表达式使用时:

  • 前++ : ++i 表示先自增后赋值

  • 后 ++: i++ 表示先赋值后自增

int j = 8;  

// int k = ++j; // 等价 j = j + 1;    k = j;
// System.out.println("k=" + k + " j=" + j); // k=9 j=9


int k = j++; // 等价 j = k;  j = j + 1;
System.out.println("k=" + k + " j=" + j); // k=8 j=9

练习题:

int i = 1;
i = ++i;  // i = i + 1;  temp = i; i = temp; 
System.out.println(i);   // 2

int j = 1;
j = j++;  // temp = j; j = j + 1; j = temp;
System.out.println(j);  // 1

总结一句话:

执行++运算符时,会创建一个临时变量,逻辑看上方代码注释。

++ 在前,先++,再将值赋给temp, 然后将temp赋值给接收变量。

++ 在后,先将值赋给temp,再执行++, 然后将temp赋值给接收变量。

题目: 定义一个变量保存华氏温度,华氏温度转换为摄氏温度的公式为:5 / 9*(华氏温度 - 100),请求出华氏温度对应的摄氏温度。
在这里插入图片描述

注意: 不能直接拿过公式就使用,在实际运算中, 5 / 9 这一步,两个int 相除,得到的也是整数类型,所以结果为 0

由 0 *(华氏温度 - 100),得到的结果始终为 0.0。

关系[比较]运算符

  • 关系运算符的结果都是 boolean 型,也就是要么为true,要么为 false;

  • 关系运算符,经常用于 if 结构的条件中或者循环结构的条件中。

关系运算符一览

在这里插入图片描述

int a = 8;
int b = 9;
boolean d = a > b;    // false
boolean s = "zhang" instanceof String;

逻辑运算符

用于连接多个条件,最终的结果也是一个boolean值

在这里插入图片描述

总结:

  • 逻辑与& 和 短路与 && 效果是一样的: 有假则假

  • 逻辑或|和 短路或 || 效果是一样的: 有真则真

  • ! :取反

  • 逻辑异或 ^: 不同则为true, 同真同假返回false。

区别:

  • 逻辑与& 和 短路与 &&

短路与 && 在第一个为false时,则第二个条件不会进行判断,最终结果为false,效率高。【推荐】

int a = 4;
int b = 9;
if (a < 1 && ++b < 50){
	System.out.println("OK");
}
System.out.println("b的值为:" + b); // 9

练习题

在这里插入图片描述

赋值运算符

介绍

将某个运算后的值,赋给指定的变量。

赋值运算符的分类

  • 基本负值运算符 =

int a = 10;

  • 复合赋值运算符

    +=、 -= 、*= 、/= 、%=: 加、减、乘、除、余

    a += b → a = a + b;

    a %= b → a = a % b

细节

复合运算符会进行类型的强制转换

byte b = 3;
b += 2;    
//我们理解的内部逻辑为: b = b + 2
//但注意 2是int,所以运算后,后面的表达式会进行自动类型转换,输出的结果为int类型,而b为byte类型,所以会报错。
//为了避免这种情况,赋值运算符会进行强制类型转换。 b = (byte)(b + 2);
//b ++;  也会对类型进行强转,输出为byte类型。 
//在三元运算符中的 b++ 不会进行强转。

三元运算符

基本语法

条件表达式 ? 表达式1: 表达式2;

运算规则:

1、如果条件表达式为true,运算后的结果为表达式1;

2、如果条件表达式为false,运算后的结果为表达式2;

int a = 10;
int b = 99;
int result = a > b ? a++ : b --;   // a>b为false, 执行b--,所以结果为:99

细节

1、表达式1 和 表达式2 要是可以赋给接收变量的类型(满足自动转换或者手动强制转换)

2、三元运算符底层为 if–else 语句。

运算符优先级

运算符优先级梳理:

1、()、{} 等 【第一行】

2、单目运算 ++ 、-- 【 第二行】

3、算术运算符 【第三行 - 第四行】

4、位移运算符 (<<、>> 、 >>> 位移 ) 【第五行】

5、比较运算符 【第六行 - 第七行】

6、逻辑运算符 【第八行 - 第十二行】

7、三元运算符 【第十三行】

8、赋值运算符 【第十四行到最后】

标识符命名规则【规则:必须遵守,否则报错。】

1、由26个英文字母大小写、0-9数字,或$组成

2、数字不可以开头。int 3ab= 1: // 错误❌

3、不可以使用关键字和保留字,但能包含关键字和保留字。

4、Java中严格区分大小写,长度无限制。int tptalNum = 10; int n = 9;在这里插入图片描述

int n = 40;
int N = 50;
System.out.println(n);   // 40
System.out.println(N);   // N. 50

5、标识符间不能包含空格。 int a b = 90; ❌

标识符命名规范【规范:更加专业】

1、包名:多单词组成时,所有字母都小写。比如:com.zhangch.crm

2、类名、接口名【大驼峰】: 多单词组成时,所有单词的首字名大写。

比如:XxxYyyZzz 。 publi class MonsterEnergy

3、变量名、方法名【小驼峰】:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。 比如:xxxYyyZzz 。 int monsterEnergy

4、常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ,比如:定义一个所得税率:TAX_RATE. MONSTER_ENERGY

Java代码规范

键盘输入语句

在编程中,需要接受用户输入的数据,用户就可以使用键盘输入语句。使用到的方法为 扫描器(对象),就是Scanner

步骤

1、导入该类的所在包, java.util.*

2、创建该类对象(声明变量)

3、调用对象的功能

演示

import java.util.Scanner;  // 将Scanner类导入

public class Input{
	public static void main(String[] args){
		//1、引入Scanner这个包
		//2、创建Scanner对象实例, new 创建一个对象
		Scanner myScanner = new Scanner(System.in);
		//3、调用对应的输入方法,接收用户的输入
		System.out.println("请输入名字");
		String name = myScanner.next();

		System.out.println("请输入年龄");
		int age = myScanner.nextInt();

		System.out.println("请输入薪水");
		double salary = myScanner.nextDouble(); 

		System.out.println("信息如下:\n" + "name"  + name + "年龄" + age + "薪水" + salary);
	}
}

进制

对于整数:

有四种表示方式:

1、二进制: 0,1 满2进1, 以0b或0B开头。

2、八进制: 0 - 7 满8进1,以数字0开头表示。

3、十进制:0 - 9 满10进1。

4、十六进制: 0-9及 a(10) - f(15),满16进1,以0x或0X开头表示。此处的A-F不区分大小写。

举例说明

int n1 = 0b1010; // 1 * 2 ^ 3 + 1 * 2 ^ 1 = 10
int n2 = 01010;  // 1 * 8 ^ 3 + 1 * 8 ^ 1 = 520
int n3 = 1010;   // 1 * 10 ^ 3 + 1 * 10 ^ 1 = 1010  
int n4 = 0x1010; // 1 * 16 ^ 3 + 1 * 16 ^ 1 = 4112

二进制、八进制、16进制 转换成十进制

规则:从最低位开始,将每个位上的数提取出来,乘以 2 (8、16)的(位数 - 1)次方,然后求和。

0b1010; → 1 * 2 ^ (4-1) + 1 * 2 ^ (2-1) = 10

01010; → 1 * 8 ^ 3 + 1 * 8 ^ 1 = 520

0x1010; → 1 * 16 ^ 3 + 1 * 16 ^ 1 = 4112

十进制 转换成 二进制、八进制、16进制

规则:将该数不断除以2(二进制)8(八进制)16(十六进制),直到商为0为止,然后将每步得到的余数倒过来,就是对应的 进制。
在这里插入图片描述
在这里插入图片描述

二进制转八进制、16进制

规则:从低位开始,将二进制数字每三位一组,转成对应的八进制数即可。

案例:0b 11010101 转成八进制: 11(3)010(2)101(5) → 0325

规则:从低位开始,将二进制数字每四位一组,转成对应的16进制数即可。

案例:0b 11010101 转成16进制: 1101(D)0101(5) → 0XD5

八进制转换成二进制

规则:将八进制数每1位,转成对应的一个3位的二进制数即可。

案例:将 0237 转成二进制。

0237 → 2(010)3(011)7(111) → 0B10011111

16进制转换成二进制

规则:将16进制数每1位,转成对应的一个4位的二进制数即可。

案例:将 0x23B 转成二进制。

0x23B → 2(0010)3(0011)B(1011) → 0B001000111011

位运算

原码、反码、补码【背下来】

1、二进制的最高位是符号位:0表示正数,1表示负数

2、正数的原码、反码、补码都一样。

3、负数的反码 = 负数的原码符号位不变,其他位取反(0变1,1变0)。

4、负数的补码 = 负数的反码 + 1, 负数的反码 = 负数的补码 - 1

5、0的反码、补码都是0

6、java没有无符号数,换言之,java中的数都是有符号的

7、在计算机进行运算的时候,都是以补码的方式来进行运算的。

8、当我们看运算结果的时候,要看他的原码。

java中的7个位运算

分别为 按位与&、按位或|、按位异或^、按位取反~

按位与 &: 有假则假,即有0则0

按位或 | : 有真则真,即有1则1

按位异或 ^:相同为0, 不相同为1

按位取反 ~: 0 → 1 ; 1→0

建议看下:P98 - P103

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

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

相关文章

RabbitMQ 消息类型

RabbitMQ 消息类型 下面我们简单介绍下RabbitMQ的一些消息种类&#xff0c;并结合Java代码进行学习。 如果需要执行代码&#xff0c;需要下载RabbitMQ的客户端&#xff08;例如java客户端&#xff1a; https://www.rabbitmq.com/java-client.html&#xff09; 使用maven&…

聊天突然尬住?教你用Python一键获取斗图表情包,各种表情包轻松化解尴尬

很多兄弟在聊天上没有下太多的功夫&#xff0c;导致自己聊天的时候很容易尬住&#xff0c;然后就不知道聊啥了&#xff0c;这时候合适表情包分分钟就能救场&#xff0c;但是一看自己收藏的表情包&#xff0c;好家伙&#xff0c;两只手都数得过来。 所以今天来给兄弟们分享一下…

IDEA书签,备份使用,全分支共享

IDEA原本设计就是给单分支保存书签使用的&#xff0c;但是我比较喜欢多个分支用同一个IDEA书签。然后在网上找到很久的IDEA书签全分支共享的办法&#xff0c;真心没找到合适的&#xff0c;自己浅浅总结了一下。首先找到我们需要备份书签的项目的目录然后在项目的目录下打开隐藏…

小程序 超长页面截图保存web-view+html2canvas

web-view文档建议参考----支付宝提供的文档&#xff0c;html2canvas官方文档&#xff08;官网可以下载html2canvas.js 和 html2canvas.min.js&#xff09;。由于篇幅受限&#xff0c;这里就贴了一下用法&#xff0c;对于web-view的配置情况&#xff0c;需要自己去查看文档&…

【测试】开发模型+测试模型

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、开发模型和测试模型概述二、 开发模型一&#xff09; 瀑布模型二&#xff09;螺旋模型三&#xff09;增量模型和迭代模型四&#xff09;敏捷模型【重点:sunny:】三、 测试模型一&#xff09;V模型二&#xff09;…

【4.2】Ribbon负载均衡策略

【4.2】Ribbon负载均衡策略1 Ribbon--负载均衡策略2.1 修改负载均衡规则--代码方式2.1.1 具体测试&#xff1a;2.2 修改负载均衡规则--配置文件方式2.2.1 具体配置3 总结Ribbon负载均衡原理 中学习到&#xff1a; IRule接口决定了负载均衡的策略。 接下来学习IRule接口的实现有…

【Java编程进阶】Object类及常用方法详解

Java 编程基础教程系列&#xff1a;Java 编程进阶之路【从入门到精通】 &#xff0c;从入门到精通一站学习&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff01;&#xff01; 文章目录1. Object类2. 常用的方法2.1 toString 方法2.2 equals 方法2.3 hashcode 方法3. 注意…

Verilog语法笔记(夏宇闻第三版)-数据类型及其常量、变量

目录 常量&#xff1a; 整数&#xff1a; x和z值: 负数: 下划线(underscore_)&#xff1a; 参数(Parameter)型&#xff1a; 变量&#xff1a; wire型&#xff1a; reg型&#xff1a; memory型&#xff1a; Verilog HDL中总共有十九种数据类型,数据类型是用来表示数字…

SSH远程连接服务详解

远程连接服务器 一&#xff0c;远程连接服务器简介 1、什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录 linux 主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在…

MyBatis Plus学习笔记

MyBatis Plus 国产的开源框架&#xff0c;基于 MyBatis 在Mybatis-Plus中&#xff0c;内置了代码生成器&#xff0c;我们可以通过该工具&#xff0c;生成我们需要的代码&#xff0c;例如&#xff1a;entity层&#xff0c;controller层&#xff0c;mapper层&#xff0c;service…

Java面向对象:构造器、this

目录构造器学构造器的目的构造器的作用样例构造器的注意事项总结this关键字this关键字是什么样例this关键字的作用总结构造器 学构造器的目的 真正知道对象具体是通过调用什么代码得到的。能够掌握为对象赋值的其他简便写法。为以后学习面向对象编程的其他内容做支撑。 构造…

Python实现可视化案例:采集天气数据并可视化分析

前言 最近长沙的天气&#xff0c;真的就是不能理解&#xff0c;大起大落的&#xff0c;就跟我的心情一样… 有点无聊就来采集一些天气数据&#xff0c;做个可视化的小案例吧&#xff08;我采集的是以前北上广深的天气数据哈&#xff09; 实现案例的步骤 一.分析数据来源 从…

狂神说笔记——Linux快速入门27

Linux快速入门 参考于&#xff1a;B站狂神视频&#xff01; Java开发之路&#xff1a;JavaSE、MySQL、前端&#xff08;HTML、Css、JS&#xff09;、JavaWeb、SSM框架、SpringBoot、Vue、SpringCloud、Mybatis-plus、Git、Linux &#xff08;CentOS 7&#xff09; 操作系统&…

【Linux】-- 程序地址空间

目录 程序地址空间 进程地址空间 - 虚拟地址空间 概念引入&#xff08;浅&#xff09; 初步理解结构 深入理解虚拟地址 为什么要有地址空间&#xff1f; 程序地址空间的角度理解挂起 程序地址空间 C/C在Linux下的程序地址空间分布&#xff1a; 栈向低地址增长&#xff0…

透过现象看本质,我找到了Netty粘包与半包的这几种解决方案

1、粘包与半包 啥也不说了&#xff0c;直接上代码是不是有点不太友好&#xff0c;我所谓了&#xff0c;都快过年了&#xff0c;还要啥自行车 我上来就是一段代码猛如虎 1.1 服务器代码 public class StudyServer {static final Logger log LoggerFactory.getLogger(StudyS…

怎样进行股票量化对冲策略分析?

股票量化对冲策略的分析需要从各方面去深入了解&#xff0c;就比如说明确量化和对冲的概念&#xff0c;可以先下载OA系统中“量化对冲 产品基础知识的学习&#xff0c;也要知道量化对冲产品在构建股票多头的同时&#xff0c;也构建期货空头。在市场不稳定的操作情绪之下&#x…

Git——初识git

1、git概述 1.1 简介 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种 项目。 Git 易于学习&#xff0c;占地面积小&#xff0c;性能极快。 它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作 流分支等特性。其性能优于…

rtl8188eus Linux驱动移植

rtl8188eus Linux驱动移植 rlt8188eus作为无线USB网卡&#xff0c;可以给我们的Linux设备提供无线上网能力&#xff0c;也能配置为AP&#xff0c;给其它无线设备提供上网能力。在使用较低版本的内核时&#xff0c;内核中不含rtl8188eus驱动&#xff0c;因此尝试自己移植&#…

1、常见的存储设备

文章目录较为常见的存储设备机械硬盘简介固态硬盘简介U盘简介固态U盘MMC卡SD卡简介TF卡NM卡MS卡CF卡CFExpress卡磁带光盘较为常见的存储设备 目前较为常见的存储设备&#xff0c;从电脑用的&#xff1a; 机械硬盘固态硬盘U盘固态U盘 到单反相机、运动相机、手机、行车记录仪…

BigDecimal 基本使用和常用方法

背景 涉及到比较大的数字之间的计算&#xff0c;使用float、double这样的浮点数就不那么准确了。因为不论是float 还是double都是浮点数&#xff0c;而计算机是二进制的&#xff0c;浮点数会失去一定的精确度。所以在商业计算中基本要用java.math.BigDecimal 一、初始化使用…