精辟全面且细致的java运算符教程详解

目录
  • 前言
  • 一、算术运算符
    • 1.1 int/int结果还是int
    • 1.2 0不能作为除数
    • 1.3 关于%
    • 1.4 增量赋值运算符+= -= *= /=
    • 1.5 自增或自减运算
  • 二、关系运算符
  • 三、逻辑运算符
    • 3.1 逻辑与&&
    • 3.2 逻辑或||
    • 3.3 逻辑非!
  • 四、位运算符
    • 4.1 按位与&
    • 4.2 按位或|
    • 4.3 按位异或^
    • 4.4 按位取反~
  • 五、移位运算
    • 5.1 左移<<
    • 5.2 右移>>
    • 5.3 无符号右移>>>
  • 六、条件运算符
  • 总结

前言

上一篇java专栏我们讲解了java的各个类型,这期我们来继续学习java的算术运算符,大家一起行动起来,你就是将来的java大佬!

一、算术运算符

基础四则运算符和C语言是一样的,都是+ - * / %
规则很简单,但我们需要对除法运算特别注意

1.1 int/int结果还是int

这里和我们的数学里的运算是不一样的,举个例子:1/2
数学中我们很快知道这个是0.5,但在计算机语言中,整形/整形结果会默认是整形,小数位会被移除,所以java中1/2结果是0

public static void main(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a/b);//打印0,如果需要小数,要有double
    }

1.2 0不能作为除数

这个和数学里是一样的,0不能作为除数,否则系统会报错

public static void main(String[] args) {
        int a=1;
        int c=0;
        System.out.println(a/c);//0是不能作为除数的,这里会异常
        System.out.println("hhh");//由于上一行代码异常了,所以从上面一段开始往后都不执行了
    }

1.3 关于%

这个符号是用来求余数的,比如10/3=3…1,那么10%3=1

public static void main(String[] args) {
        System.out.println(10%3);//打印1
        System.out.println(-10%3);//-1
        System.out.println(10%-3);//1
        System.out.println(-10%-3);//-1
        System.out.println(11.5%3);//2.5
    }

1.4 增量赋值运算符+= -= *= /=

public static void main(String[] args) {
        int a=10;
        a+=1;//a=a+1
        System.out.println(a);//打印11
        short b=1;
        //b=b+1;//直接这样写会报错,因为单独一个1默认是整形,整形与short型的b相加会提升到整形,直接赋值会出错
        b=(short)(b+1);//正确写法1
        b+=1;//正确写法2
    }

其他增量运算符也是一样的,a-=n也就是a=a-n,剩下的以此类推
关于short b=1;b+=1;在java中如果是增量赋值运算符,系统会自动帮你进行强制类型转换,但是如果你直接写b=b+1是会报错的,这时需要你自己手动强制类型转换

1.5 自增或自减运算

a++和++a的区别就是,前者是先用a,然后给a+1;后者是先给a+1,然后用a
比如,a=0;if(a++)这里的if里面就是0,因为是先用了a=0,然后给a+1。
a=0;if(++a)这里面的if就是1,因为是先给a+1,a已经变成1了,然后用a。

public static void main(String[] args) {
        int a=10;
        int a2=a++;
        System.out.println(a);//打印11
        System.out.println(a2);//打印10
        int b=10;
        int b2=++b;
        System.out.println(b);//打印11
        System.out.println(b2);//打印11
    }

二、关系运算符

关系运算符共有6个:
== 判断两边是否相等
!=判断两边是否不等
<和>小于和大于符号
<=和> =小于等于和大于等于符号

public static void main(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a==b);//false
        System.out.println(a!=b);//true
        System.out.println(a<b);//true
        System.out.println(a>b);//false
        System.out.println(a<=b);//true
        System.out.println(a>=b);//false
    }

这里和C语言不同的是,C语言中关系运算符成立是1,不成立是0。但java中不一样,java中关系运算符的表达式返回值都是boolean类型,也就是说,只有true或false没有1和0
ps:java中判断是if(布尔表达式)而不是C语言中的if(1/0)

三、逻辑运算符

常用逻辑运算符主要有三个:&&,||,!
注意:逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean

3.1 逻辑与&&

大白话说就是高中我们学的 ^ “且”的意思
也就是说 表达式1&&表达式1 必须全真为真,一假为假
规则:两个操作数都是true,结果为true,否则结果为false
ps:短路——如果表达式1是假,表达式整体肯定是假,计算机系统就不会浪费时间去判断表达式2了。

public static void main(String[] args) {
        int a=10;
        int b=20;
        int c=30;
        System.out.println(a<b&&b<c);//a<b成立且b<c成立,所以式子整体成立,打印true
        System.out.println(a>b&&b<c);//a>b不成立,不管b<c是否成立,式子整体肯定是false
    }

3.2 逻辑或||

也就是我们高中学的v“或”的意思
表达式1||表达式2 有一真为真,全假为假
规则:两个操作数一个是true,结果为true,两操作数全为false,结果为false
短路——表达式1为真,表达式整体肯定为真,不用再判断表达式2了

public static void main(String[] args) {
        int a=10;
        int b=20;
        int c=30;
        System.out.println(a<b||b>c);//a<b成立就不用再判断b>c是否成立了,式子整体肯定为true
    }

3.3 逻辑非!

!布尔表达式
!false=true
!true=false
注意:!是一个单目运算符,只有一个操作数

public static void main(String[] args) {
        int a=10;
        int b=20;
        //System.out.println(!a<b);//这样会报错
        System.out.println(!(a<b));
        //如果要对a<b这个式子进行真假判断,必须加括号
    }

注:&和|(不推荐使用)
&和|如果操作数是boolean时,也可以表示逻辑运算,但是与&&和||相比,它们不支持短路求值。

四、位运算符

java中对数据的操作的最小单位不是字节,而是二进制位
位运算符主要有4个:&,|,^,~
位操作表示按二进制位运算,计算机中都是用二进制来表示数据(0/1构成的数字序列),位运算就是按照二进制每一位依次进行计算

4.1 按位与&

如果两个对应二进制位都是1,结果为1,否则结果为0

public static void main(String[] args) {
        int a=10;//0000 1010
        int b=20;//0001 0100
        //按位与:  0000 0000 对应的数字为0
        System.out.println(a&b);//打印0
    }

4.2 按位或|

如果两个对应二进制位有1,结果为1,全是0为0

public static void main(String[] args) {        int a=10;//0000 1010        int b=20;//0001 0100        //按位或:   0001 1110 对应的数字为30        System.out.println(a|b);//打印30    }

4.3 按位异或^

如果两个对应二进制位相异为1,相同为0

public static void main(String[] args) {        int a=10;//0000 1010        int b=30;//0001 1110        //按位异或   0001 0100 对应的数字为20        System.out.println(a^b);//打印20    }

本质就是找不同

4.4 按位取反~

二进制位上是0变成1,1变成0

public static void main(String[] args) {
        int a=10;//0000 0000 0000 0000 0000 0000 00001010
        //按位取反  1111 1111  1111 1111  1111 1111  1111 0101
        //16进制打印 f    f     f    f      f    f    f    5
        //ps:4位2进制是16种情况,对应16进制的16个数
        System.out.printf("%x\n",~a);//打印fffffff5
    }

五、移位运算

移位运算符有三个:
<< >> >>>
都是按照二进制位运算
注意:移位移动的是补码,如果是正数,原码和补码一样,所以你直接移动原码也可以
,但是如果是负数,你必须先转换成补码移位,然后再转换成原码

5.1 左移<<

最左侧位不要了,最右侧补0
比如现在有一个二进制数0000 1011(十进制11),我们对其进行移1位操作
0000 1011<<1
000 10110(对应十进制的22)
左边的0不要了,后面往左跟进一位,最右边会空出一位,我们进行补0操作
实际效果相当于11*2^1

再举一个例子:仍然是上面的二进制数0000 1011,进行移2位操作
0000 1011<<2
00 101100(对应十进制的44)
左移两位,左边两个数就不要了,最右边会空出2位,我们补0
实际效果相当于11*2^2

public static void main(String[] args) {
        int a=11;
        System.out.println(a<<1);//打印22
        System.out.println(a<<2);//打印44
    }

5.2 右移>>

右移,左边补符号位
注意:是符号位,是符号位,是符号位(重要的事情说三遍)
比如0000 1011>>1
得到0000 0101(十进制的5)
实际效果相当于11/(2^1)

再举个例子-11,二进制1000 1011
1000 1011(原)
1111 0100(反)
1111 0101(补)

补码进行右移1位
1111 1010(新补码)
1111 1001(新反码)
1000 0110(新原码)
新原码对应十进制数-6

public static void main(String[] args) {
        int a=11;
        int b=-11;
        System.out.println(a>>1);//打印5
        System.out.println(b>>1);//打印-6
    }

5.3 无符号右移>>>

不管符号位是啥,左边统一补0
由于是无符号了,也就说没有所谓的负数了,也就说数值首位不再是符号位了。
那么1000 1010(十进制138)右移1位,得到0100 0101(十进制的69)

public static void main(String[] args) {
        int a=138;
        System.out.println(a>>>1);//打印69
    }

那讲到这里,大家可能会问,哎,你怎么不讲无符号左移啊?
讲个笑话:没有无符号左移
不是说我不讲无符号左移啊,是真的这玩意不存在啊哈哈哈。
为什么呢?打个比方,你现在左移一位,那你右边不还是补0嘛,那这不就是(有符号)左移吗?

六、条件运算符

条件运算符和c语言一样:
表达式1?表达式2:表达式3
判断表达式1是否成立,成立执行表达式2,否则执行表达式3

public static void main(String[] args) {
        int a=10;
        int b=20;
        int max=a>b?a:b;//a>b不成立,执行b,也就说b赋值给max
        System.out.println(max);//打印20
    }

总结

好啦,这就是今天的全部内容,内容量不大,但都是java必须掌握的知识点,希望读者耐心学习,最后祝读者学业有成。更多关于java运算符教程的资料请关注我们其它相关文章!

(0)

相关推荐

  • 全面剖析java 数据类型与运算符

    目录 java的变量和类型 基本数据类型--数值型 整型 浮点型 字符型 布尔型 运算符 运算符:| 运算符:& 运算符:^ 运算符:~ 运算符:>> 运算符:<< 运算符:>>> java的数据类型与运算符 java的变量和类型 变量指的是程序运行是可变的量,其需要开辟内存空间用于储存一些数据 而类型是对变量的种类进行划分,不同的类型有不同的属性 基本数据类型--数值型 整型 byte byte 变量名=初始值 byte类型表示一个整形不过只占1个字节:

  • Java运算符从见过到掌握上

    目录 一.前言 二.运算符: 1.算术运算符: 模的运算特点: 除的特点: 字符的+号操作 连接符+号演示图: 代码: 2.关系运算符 关系运算演示图 : 代码: 3.逻辑运算符: 逻辑演示图: 代码: &&和||逻辑逻辑运算符的运算规则 一.前言 前面我们讲了Java的入门知识,相信许多小伙伴对Java基础有一个大概的认识了,这也为我 们后续的学习打下了基础,所以我们可以继续学习之后的知识了(Java前几章的知识基本和 c语言知识一样). 二.运算符: 算术运算符 赋值运算符 自增自减运

  • Java 位运算符>>与>>>区别案例详解

    下图是java教程中对于>>和>>>区别的解释,但是介绍的并不详细,因为这两种运算符是以补码二进制进行运算的. 1.学习过计算机原理的都知道,数字是以补码的形式在计算机中存储的,那么源码,反码,补码之间的关系是如下所示: **正整数**的原码.反码和补码都一样: **负数部分**: 1.原码和反码的相互转换:符号位不变,数值位按位取反 2.原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1 3.已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1 2.了解

  • Java运算符从见过到掌握下

    目录 一.前言 二.运算符 赋值运算符 自增自减运算符 前置和后置的区别: 后置++--示例图 代码: 前置++--代码示例: 代码: 三元运算符 三元表达式的示例: 代码: 一.前言 前面我们介绍了运算符的一部分运算符,现在我们把剩余的他介绍完全来 二.运算符 赋值运算符 所谓赋值,就是一个等于号连接的两个如int a=10;double f=3.14之类的 自增自减运算符 自增自减就是形如++ ,--,具体又分为前置后置++和前置后置--. 前置和后置的区别: 后置++就是先使用再自增,后置

  • Java 运算符详情

    目录 1.算术运算符 2.关系运算符 3.逻辑运算符 4.位运算符 5.赋值运算符 6.条件运算符 7.instanceof 运算符 Java 中的运算符与 C 语言基本一致. 1.算术运算符 操作符 描述 例子 + 加法 : 相加运算符两侧的值 A + B 等于 30 - 减法 : 左操作数减去右操作数 A – B 等于 -10 * 乘法 : 相乘操作符两侧的值 A * B 等于200 / 除法 : 左操作数除以右操作数 B / A 等于2 ++ 自增: 操作数的值增加1 B++ 或 ++B

  • 初识Java基础之数据类型与运算符

    目录 数据类型 布尔类型 字符串类型String 拼接字符'+' 转义字符 运算符 加减乘除 模运算 增量赋值运算符 自增运算符和自建运算符 赋值运算符 判断运算符 逻辑判断符 按位运算符 移位运算 条件运算符 运算符优先级 总结 数据类型 布尔类型 Java当中的bool类型也是两个:true(真) 和false(假) 不同于C语言,在C语言中,我们可以将一个数字放在bool类型中,0为假,非0为真 int fun(){ return 1; } bool a = fun(); 在Java中,b

  • Java双冒号(::)运算符使用详解

    目录 1.说明 2.先来说下@FunctionalInterface 3. 下面来讲讲这个 "::"是干嘛的 4. 建立一个Person类 4:构建多个person对象,放入数组中,然后对数组中的person重新排序 5:揭秘 "::"符号 6.0 方法引用的支持如下 1.说明 之前没用过::这个东西,今天看flink的时候发现官网有个例子用到了这个符号, 本着求知欲去百度查了一番,没找到能说到我心里去的解释,本着求知欲的态度,我去了官网看了看. java :: 2

  • 精辟全面且细致的java运算符教程详解

    目录 前言 一.算术运算符 1.1 int/int结果还是int 1.2 0不能作为除数 1.3 关于% 1.4 增量赋值运算符+= -= *= /= 1.5 自增或自减运算 二.关系运算符 三.逻辑运算符 3.1 逻辑与&& 3.2 逻辑或|| 3.3 逻辑非! 四.位运算符 4.1 按位与& 4.2 按位或| 4.3 按位异或^ 4.4 按位取反~ 五.移位运算 5.1 左移<< 5.2 右移>> 5.3 无符号右移>>> 六.条件运算

  • Linux server配置安装Java与Tomcat服务器教程详解

    系统:Ubuntu 16.04 dev_desktop 1.Java安装并配置环境变量 (1)从Java官方网站下载最新版JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载jdk压缩包 jdk-8u144-linux-x64.tar.gz (2)  将压缩包解压并复制到/usr/lib 目录下 tar -zxvf jdk-8u144-linux-x64.tar.gz sudo cp -r ./jdk

  • java(jdk)环境变量配置(XP、win7、win8)图文教程详解

    对于初学java的同学来说,第一件事不是写hello world,而是搭建好java开发环境,下载jdk,安装,配置环境变量.这些操作在xp.win7.win8不同的操作系统里面配置不太一样,所以我来写一下在上面不同操作系统下是如何配置的. windos系统jdk6~8版本(含32位和64位)下载地址:http://pan.baidu.com/s/1jIslu78 XP 1. 安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为:C:\Program Files\Java\jd

  • java 中maven pom.xml文件教程详解

    maven pom.xml文件教程详解,具体内容如下所示: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.x

  • android自动生成dimens适配文件的图文教程详解(无需Java工具类)

    在编写ui界面时因为手机分辨率大小不同,所以展现出来的效果也是不同的,这个时候就需要考虑适配器,让根据手机分辨率自动适配相应尺寸来展示界面,可以提高用户的体验感. 1.首先安装插件ScreenMatch,安装成功之后android studio会提示重启 2.在res->values下创建一个dimens文件,将以下代码复制进去.如果不创建这个文件一下操作会不成功导致项目重启. <dimen name="common_margin">@dimen/dp_15</

  • Java MeteoInfo解析与绘图代码教程详解

    最近太忙了,终于有时间继续写了,上文说到了基本上的绘图方法,但缺少色阶呈现,一般图叠加着地图上,后端不需要管色阶,但也要注意web页面色阶和我们的生成色阶一定要对的上 对于后端导出图片的话,就需要添加色阶了,这一文很简单,就涉及色阶,名称,网格刻度线 顺便对代码我进行了优化,看起来更直接 MeteoDataInfo meteoDataInfo = new MeteoDataInfo(); meteoDataInfo.openMICAPSData("D:\\解析数据\\cldas\\cldas\\

  • java中TestNG使用教程详解

    目录 一.TestNG介绍 二.TestNG安装(基于eclipse+maven) 三.TestNG基本使用和运行 1.直接运行: 2.xml方式运行 四.注解说明 五.TestNG断言 六.TestNG预期异常测试 七.TestNG忽略测试 八.TestNG超时测试 九.分组测试 十.分suite测试 十一.依赖测试 十二.参数化测试 十三.XML配置文件说明 1.suite标签 2.test标签 3.group标签 4.其他 十四.TestNG报告 一.TestNG介绍 TestNG是Jav

  • Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解

    上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签,查出后,我把这些内容写入css和js等其他文件所在目录的一个文件内,然后将这整个文件夹压缩打包下载,解决过程中遇到了下载出来后并没有保存层级目录,在查了好久方法后完成了如下版本,已经可以正常下载并保留层级目录. //ZIP文件包压缩下载 @Override public void downloadZip(String id,HttpServl

  • Java中JDBC的使用教程详解

    目录 概念 快速入门 步骤 代码实现 详解各个对象 DriverManager:驱动管理对象 Connection:数据库连接对象 Statement:执行sql的对象 ResultSet:结果集对象,封装查询结果 PreparedStatement:执行sql的对象 抽取JDBC工具类 : JDBCUtils 分析 代码实现 练习 JDBC控制事务 事务 操作 使用Connection对象来管理事务 代码 概念 Java DataBase Connectivity  Java 数据库连接, J

随机推荐