第五篇java运算符

     2022-03-15     119

关键词:

一、算术运算符

算术运算符我们从小学就在学习了,加(+)减(-)乘(*)除(/)以及模数(%,整数除法获得余数)。整数除法会直接去掉小数,而不是进位,比如10/3=3;浮点数也可以进行除法,不过会进位。

Java也用一种简写形式进行运算,并同时赋值操作。这是由等号前的一个运算符标记的,而且对于语言中的所有运算符是固定的,比如,为了将4加到变量x,并将结果赋给x,可用:x+=4;

二、自动递增和递减

递减运算符是”--”意为值减-1,递增运算符是”++”意为值+1。这两个运算符主要注意他们出现在变量的位置,如果是出现在变量之前(--a或++a),则先执行计算,然后再将计算的值赋给变量,如果是出现在变量之后(a--或a++),则先给变量赋值,再执行计算操作。

int i = 1;
System.out.println("++i:" + ++i); //先计算再赋值
System.out.println("i++:" + i++); //先赋值再计算
System.out.println("i:"+i);
		
System.out.println("--i:" + --i); //先计算再赋值
System.out.println("i--:" + i--); //先赋值再计算
System.out.println("i:"+i);

输出结果:

++i:2
i++:2
i:3
--i:2
i--:2
i:1

三、逻辑运算符

逻辑运算符AND(&&)、OR(||)以及NOT(!)能生成一个布尔值(true或false)。&&和||是二元运算符,&&只要其中有一个值是false,结果就为false,||刚好相反,只要其中有个值为true,结果就为true。!是一个一元运算符,如果值为true,结果就为false。

逻辑运算符主要注意的是它的”短路“,&&只要遇到false后面的表达式就不会被执行,||只要遇到true后面的表达式就不会被执行。

boolean b = 1 > 2 && 1/0 ==0; //1>2为false,1/0就不会被执行。
//boolean b1 = 1 < 2 && 1/0 ==0;//1<2为true,会执行1/0,就会报by zero异常
boolean b2 = 1 < 2 || 1/0 == 0; //1<2 为true,1/0不会被执行。
//boolean b3 = 1 > 2 || 1/0 == 0;//1>2为false,1/0就会被执行。

四、按位运算符

位运算在项目中用的还是比较少,我见过把位运算用的最精彩的地方是二进制权限控制。

按位AND(&):若两个输入位的值都为1,则结果为1,否则结果为0。按位OR(|):若两个输入位里至少有一个是1,则结果为1,只有在两个输入位都是0的情况下,它才会生成一个0。按位XOR(^,异或):若两个输入位值不同,那结果就是1。按位NOT(-,也叫做”非”运算符):属于一元运算符,若输入0,则结果是1,若输入1,则结果是0。

值得注意的是,因为布尔(boolean)类型值占一位,true为1,false为0,所以布尔类型也可以进行按位AND、OR和XOR,但是不能进行按位NOT(大概是为了避免与逻辑NOT混淆)。按位运算符在进行布尔类型运算时与逻辑运算符有相同过的效果,只不过不会短路。

五、移位运算符

移位运算符面向的运算对象是二进制的”位“,所以应先将数值转换成二进制再进行运算。

1. 左移位运算符(<<)能将运算符左边的运算对象向左移动运算符指定的位数(在低位补0)。右移运算符分为两种:有符号右移(>>)和无符号右移(>>>)。”有符号“右移,若值为正,则在高位补0,若值为负,则在高位补1。”无符号“右移,无论值正负,都在高位补0。

2. char、byte和short在进行移位操作之前,都会将值自动转换成int,再进行移位操作。因为有个转换过程,所以移位后的值可能不是正确的结果。比如下面这个例子:

short s = -1;
s >>>= 10;
System.out.println(s); //输出-1

short类型在移位之前先自动转换成int类型,负数在内存中都是以补码的形式存在,所以-1在内存中的表示是1111 1111 1111 1111 1111 1111 1111 1111 ,在无符号移10位后变成0000 0000 0011 1111 1111 1111 1111 1111,因为short类型只占2个字节,16位,所以取移位后的低16位,还是1111 1111 1111 1111,所以结果就为-1。

3. int类型只占32位,那如果我们移动的位数超过了32,值不就永远都变成了0或者1,这显然是不对的。所以java做了规范,为了防止我们在一个int数里移动不切实际的数字,只有右侧的5个低位有效。这句话的意思是,我们先将移位数转换成二进制,然后再取二进制右侧的5个低位,这样移位的数就永远不会超过了32。比如-1 >>>= 34,34超过了32,34的二进制是00100010,取5个低位时00010,十进制的2,所以-1 >>>= 34等于-1 >>>= 2

int i = 1;
i <<= 34;
System.out.println(i);  //4
		
int i2 = 1;
i2 <<= 2;
System.out.println(i2); //4

4. 左移一位相当乘以2,右移一位相当除以2,移位是最快的2的指数运算。

5. 利用移位和位运算将int类型的整数转换成二进制,我觉得是最快的方式

static void pBinInt(int i){
	for(int j = 31; j >= 0 ; j--){
		if(((1 << j) & i) != 0){
			System.out.print(1);
		}else{
			System.out.print(0);
		}
	}
}

六、三元if-else运算符

表达式采取下述形式:布尔表达式?值0:值1

若”布尔表达式“的结果为true,则计算”值0“,而且它的结果成为最终由运算符产生的值。但若”布尔表达式“的结果为false,计算的就是”值1“,且它的结果成为最终由运算符产生的值。

其实这个运算符就是if-else的简写,效果等同于下面的语句

if(布尔表达式){
	值0;
}else{
	值1;
}

第五篇python基本语法

...化输出2、format格式化函数3、f-string格式化4.2.2换行输出5运算符6判断语句 查看详情

第五篇python基本语法

...化输出2、format格式化函数3、f-string格式化4.2.2换行输出5运算符6判断语句 查看详情

第五篇:明确拒绝不想编译器自动生成的拷贝构造函数和赋值运算符重载函数

前言    如果你不想要编译器帮你自动生成的拷贝机制(参考前文),那么你应当明确的拒绝。    如何拒绝?这便是本文要解决的主要问题。问题描述    当你定义了一个类,而这个类中... 查看详情

java学习第五篇--java基础语法

1.Java关键字     定义:被Java语言赋予特定含义的单词     注意:goto和const是Java的保留字用于定义访问权限修饰符的关键字   private  protected  public用于定义类,函数,变量... 查看详情

htmldom第五篇

通过HTMLDOM,JavaScript能够访问HTML文档中的每个元素。HTMLDOM允许您在事件发生时执行代码。当HTML元素"有事情发生"时,浏览器就会生成事件:在元素上点击加载页面改变输入字段添加、删除和替换HTML元素HTMLDOM允许JavaScript对HTML事... 查看详情

接口测试(java+testng+ant+jenkins)第五篇java二

1、数据代码分离,方便维护。  一般做法是将数据保存在excel,通过程序读取。2、读取excel数据。  在D盘新建excel,A列放url,B列放参数。      新建classredExcelpackagecom.lx;importjava.io.File;importjava.io.IOException;importjxl.*;impo... 查看详情

#java学习之路——基础阶段二(第五篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

混合编程jni第五篇之c++访问java代码

 今天继续JNI的学习,因为是混合编程,所以在写的过程中需要进行交互Java可以调用C++,C++也可以调用Java,虽然作为Java程序很少写C++,但是既然是做JNI开发,就不得不了解下如果在C++中访问Java的属性和方法,开始吧访问属... 查看详情

测开之函数进阶篇・第五篇《递归函数纯函数匿名函数偏函数》(代码片段)

...3个原则函数的副作用python常用的内置函数匿名函数三步运算符偏函数偏函数的定义偏函数的案例递归函数递归函数的定义在函数中调用函数自身,我们把这样的函数叫做递归函数定义递归函数#通过递归函数实现阶乘deffun(n):i... 查看详情

rabbitmq第五篇:spring集成rabbitmq

  前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq。  首先引入配置文件org.springframework.amqp,如下<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring 查看详情

第五篇css补充二

h1{background-color:palegreen}一、内容概要1、图标2、目录规划3、a标签中的img标签在浏览器中的适应性4、后台管理系统设置5、边缘提示框6、登录页面图标7、静态对话框8、加减框补充知识:line-height是行高,也可以定义行间距用法:... 查看详情

混合编程jni第五篇之c++访问java代码(代码片段)

 系列目录:【混合编程Jni】系列目录_香菜聊游戏的博客-CSDN博客今天继续JNI的学习,因为是混合编程,所以在写的过程中需要进行交互Java可以调用C++,C++也可以调用Java,虽然作为Java程序很少写C++,但是既然是做JNI开发,就... 查看详情

docker第五篇存储

镜像概述复习  Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层  如果运行中的容器修改了现有的一个已经存在的文件,那改文件将会从读写层下面的只读层复制到读写... 查看详情

第五篇:常用模块

第五篇:常用模块   PYTHON-模块time&datetime+目录规范PYTHON-模块-time&datetime-练习+目录规范PYTHON-模块sysosrandomshutilPYTHON-模块sysosrandomshutil-练习PYTHON-模块jsonpickleshelvexmlPYTHON-模块logginghashlibPY 查看详情

jdk11|第五篇:启动单个java源代码文件的程序(代码片段)

文章首发于公众号《程序员果果》地址:https://mp.weixin.qq.com/s/h1L4FmzVSix434gVt8Fc7w一、简介JEP330-启动单文件代码程序(LaunchSingle-FileSource-CodePrograms),是JDK11中一个很不错的功能。这个功能允许你直接使用java解析器运行java代码,java文... 查看详情

用仿actionscript的语法来编写html5——第五篇,graphics绘图

用仿ActionScript的语法来编写html5——第五篇,Graphics绘图canvas本身就是一个Graphics,可以直接进行绘图在actionscript里面,每个Sprite都有一个Graphics,Shape我先不考虑了,它更容易实现些,在Html5中,绘图都是绘在同一个canvas上面的,... 查看详情

关于ajax第五篇

AJAX-服务器 响应如需获得来自服务器的响应,请使用XMLHttpRequest对象的responseText或responseXML属性。AJAX- onreadystatechange 事件当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当readyState改变时,就会触发onr... 查看详情

spring第五篇

在Spring第四篇中我们主要介绍了setget的注入方式在Spring第五篇中我们主要介绍使用注解配置Spring主要分为两个步骤1导包的同时引入新得约束导包如下 1.1重写注解代理配置文件代码如下  <?xmlversion="1.0"encoding="UTF-8"?>... 查看详情