运算

1.运算符分类

算术运算符 二元运算符 +,-,*,/,%
一元运算符 ++,--
赋值运算符   =
扩展运算符 +=,-=,*=,/=
关系运算符 >,<,>=,<=,==,!=  instanceof
逻辑运算符 &&,||,!,^
位运算符 &,|,^,~ , >>,<<,>>>
条件运算符 ? :
字符串连接符 +


2.简介

2.1 算术运算符

2.1.1二元运算

1)算术运算符中+,-,*,/,%属于二元运算符,

二元运算符指的是需要两个操作数才能完成运算的运算符。

其中的%是取模运算符,就是求余数操作

2)二元运算符的运算规则:
 整数运算:
  1. 如果两个操作数有一个为Long, 则结果也为long。
  2. 没有long时,结果为int。即使操作数全为short,byte,结果也是int。
 浮点运算:
  1. 如果两个操作数有一个为double,则结果为double。
  2. 只有两个操作数都是float,则结果才为float。
 取模运算:
  1.其操作数可以为浮点数,一般使用整数,结果是“余数”,

2. “余数”符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1

2.1.2 一元运算

自增、自减运算符:++,--

单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。作用是使变量的值增1或减1,如:

++x(--x)表示在使用x之前,先使x的值增(减)1。

x++(x--)表示在使用x之后,使x的值增(减)1。

 int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
System.out.println("a="+a+"\nb="+b); // a=4 b=3
a = 3;
b = ++a; //执行完后,c=5。a先自增,再给c赋值
System.out.println("a="+a+"\nb="+b); //a=4 b=4 
int f=2;
int m=2;
int x=(f*m++)+m; //x=7;
int y=(f*++m)+m; //y=9;

2.1.3算术混合运算的精度

java中数据类型的精度从“低”到“高”排列的顺序是:

byte short char int long float double

Java在计算算术表达式的值时,使用下列计算精度规则:

  • 如果表达式中有双精度浮点数(double型数据),则按双精度进行运算.
  • 如果表达式中最高精度是单精度浮点数(float型数据),则按单精度进行运算.
  • 如果表达式中最高精度是long型整数,则按long精度进行运算.
  • 如果表达式中最高精度低于int型整数,则按int精度进行运算.
  • char型数据和整型数据运算结果的精度是int。

例如:5/2的结果是2,要想得到2.5,必须写成5.0/2或5.0f/2。

例如:byte x=7; 则执行表达式 ‘B’+x; 的结果是int型。

2.2  赋值运算符

运算符 用法举例 等效的表达式
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a /= b a = a/b
%= a %= b a = a%b
int a=3;
int b=4;
a+=b;//相当于a=a+b;
System.out.println("a="+a+"\nb="+b); //a=7 b=4
a=3;
a*=b+3;//相当于a=a*(b+3)
System.out.println("a="+a+"\nb="+b); //a=21 b=4

2.3 关系运算符

关系运算符用来进行比较运算,关系运算的结果是布尔值:true/false

运算符 含义 示例
== 等于 a==b
!= 不等于 a!=b
> 大于 a>b
< 小于 a<b
>= 大于或等于 a>=b
<= 小于或等于 a<=b

注意事项
    =是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
    ==、!= 是所有(基本和引用)数据类型都可以使用

  • 在关系运算符中,当操作数是基本数据类型时,比较的是数据内容;
  • 在关系运算符中,当操作数是引用类型时,比较的是引用对象的引用值,判断是否是同一对象,而没有比较对象的内容。

  
    > 、>=、 <、 <= 仅针对数值类型(byte/short/int/long,float/double,char)

2.4 逻辑运算符

逻辑运算的操作数和运算结果都是boolean值

运算符 说明
逻辑与 &( 与) 两个操作数为true,结果才是true,否则是false
逻辑或 |(或) 两个操作数有一个是true,结果就是true
短路与 &&( 与) 只要有一个为false,则直接返回false
短路或 ||(或) 只要有一个为true, 则直接返回true
逻辑非 !(非) 取反:!false为true,!true为false
逻辑异或 ^(异或) 相同为false,不同为true  (异或加密)
短路与和短路或采用短路的方式。
从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,
则不会继续计算运算符右边的操作数,提高效率。 boolean c = 1>2 && 2>(3/0); System.out.println(c);
//1>2的结果为false,那么整个表达式的结果即为false,将不再计算2>(3/0)
boolean d = 1>2 & 2>(3/0); System.out.println(d);
//1>2的结果为false,那么整个表达式的结果即为false,
//还要计算2>(3/0),0不能做除数,
//会输出异常信息
class Test
{ public static void main(String args[])
{ int x,y=10;
if( ((x=0)==0) || ((y=20)==20) )
{
System.out.println("现在y的值是:"+y);
}
}
}
run:
现在y的值是:10
成功构建 (总时间: 0 秒) 
//例子1中利用“异或”运算的性质,对几个字符进行加密并输出密文,然后再解密。
class Example3_1
{ public static void main(String args[])
{ char a1='十',a2='点',a3='进',a4='攻';
char secret='8';
a1=(char)(a1^secret);
a2=(char)(a2^secret);
a3=(char)(a3^secret);
a4=(char)(a4^secret);
System.out.println("密文:"+a1+a2+a3+a4);
a1=(char)(a1^secret);
a2=(char)(a2^secret);
a3=(char)(a3^secret);
a4=(char)(a4^secret);
System.out.println("原文:"+a1+a2+a3+a4);
}
}
密文:卹炁迣攃
原文:十点进攻
Process finished with exit code 0 

2.5 位运算符

位运算指的是进行二进制位的运算

位运算符 说明
~ 取反
& 按位与
| 按位或
^ 按位异或
<< 左移运算符,左移1位相当于乘2
>> 右移运算符,右移1位相当于除2取商
int a = 3*2*2;
int b = 3<<2; //相当于:3*2*2;
int c = 12/2/2;
int d = 12>>2; //相当于12/2/2; &和|既是逻辑运算符,也是位运算符。
如果两侧操作数都是boolean类型,就作为逻辑运算符。
如果两侧的操作数是整数类型,就是位运算符

2.6 条件运算符

三目条件运算符格式

x ? y : z  //x 为 boolean 类型表达式,
先计算 x 的值,
若为true,则整个运算的结果为表达式 y 的值,
否则整个运算结果为表达式 z 的值
int score = 80;
int x = -100;
String type =score<60?"不及格":"及格";
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " + type); // type=及格
System.out.println("flag= "+ flag); //flag=-1

2.7 字符串连接符

“+”运算符两侧的操作数中只要有一个是字符串(String)类型,

系统会自动将另一个操作数转换为字符串然后再进行连接。

 int a=12;
System.out.println("a="+a);//输出结果: a=12

2.8 instanceof 运算符

instanceof 运算符

是二目运算符,左面的操作元是一个对象;右面是一个类。当左面的对象是右面的类或子类创建的对象时,该运算符运算的结果是true ,否则是false。

例题:

class Test
{ public static void main (String argv[])
{ String s=new String("abc");
if(s instanceof String)
System.out.println("s is a string");
B b=new B();
if(b instanceof Object)
System.out.println("b is definitedly an object");
}
}


3 运算符优先级

优先级 运算符 结合性
1 () 括号运算符 由左至右
2 !、+(正号)、-(负号) 一元运算符 由右至左
~ 位逻辑运算符
++、-- 递增与递减运算符
3 *、/、% 算术运算符 由左至右
4 +、-
5 <<、>> 位左移、右移运算符
6 >、>=、<、<= 关系运算符
7 ==、!=
8 & 位运算符、逻辑运算符
9 ^
10 |
11 && 逻辑运算符
12 ||
13 ? : 条件运算符 由右至左
14 =、+=、-=、*=、/=、%= 赋值运算符、扩展运算符
a||b&&c  的运算结果是:a||(b&&c),而不是(a||b)&&c
逻辑非>逻辑与>逻辑或
可用小括号提高优先级,增强可读性

3022Java_运算的更多相关文章

  1. PHP赋值运算

    1. 赋值运算:= ,意思是右边表达式的值赋给左边的运算数. $int1=10; $int1=$int1-6; //$int1=4 echo $int1,"<br>"; ...

  2. javascript中的浮点数运算

    解释一下下面代码的输出 console.log(0.1 + 0.2); //0.30000000000000004 console.log(0.1 + 0.2 == 0.3); //false Jav ...

  3. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  4. 妥协与取舍,解构C#中的小数运算

    题外话 正文开始之前,我首先要感谢博客园提供的这个优秀的平台.通过在这个优秀的平台上和很多志同道合的朋友交流,互相帮助,我也很荣幸的获得了15年的微软MVP的奖项.也使我更加坚信了代码改变世界.感激! ...

  5. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

  6. pyhton学习笔记(基础五:数据类型、数据运算)

    数据类型初识 1. 数字 整数:2是一个整数的例子 长整数 不过是大一些的整数 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3*10-4. (-5+4j ...

  7. JS-- 浮点数运算处理

        一. 问题描述 最近在做一个项目,页面上会存在一些JS浮点数的运算,发现JS浮点数运算存在一些bug.譬如: 0.1+0.2 == 0.30000000000000004 0.1 + 0.7 ...

  8. [LeetCode] Plus One Linked List 链表加一运算

    Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...

  9. [LeetCode] Plus One 加一运算

    Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...

随机推荐

  1. 反编译Jar包

    Jar 包(Java Archive)是对 Java 程序的打包,它可能包含源码,也可能没有. 对于有包含源码的 Jar 包,在 Eclipse 工程里设定好 source code 路径后能直接查看 ...

  2. String方法总结

    蓝背景为与Array相同的方法 一.字符方法 charAt(index):返回在指定位置的字符. var str="abcdefg"; //undefined str[0] //& ...

  3. 王立平--GC

    Gabage Collection:垃圾回收 是.net中对内存管理的一种功能. 垃圾回收器跟踪并回收托管内存中分配的对象,定期运行垃圾回收以回收分配给没有有效引用的对象的内存. 当使用可用内存不能满 ...

  4. HTTP协议(一些报头字段的作用,如cace-control、keep-alive)

    ---恢复内容开始--- Http连接是一种短连接,是一种无状态的连接. 所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接. 如果是一个连接的话,服务器 ...

  5. java 压缩以及解压文件,有tar,zip,gz(gizp)和解压

    package com.yabsz.decompCompr; import java.io.File; import java.util.ArrayList; import java.util.Lis ...

  6. 使用Eclispe 查看api技巧

    使用eclispe都会知道当我们把鼠标的光标放到指定发方法上时程序会弹出一个提示,大家不要无论这个提示这个提示就是源码中的说明包含了函数參数使用方法 非常多时候我们碰到一个不会的方法的时候第一步都会选 ...

  7. 在Eclipse安装ADT

    Eclipse 3.4 (Ganymede) 启动 Eclipse,然后选择 Help > Software Updates….在出现的对话框中.单击 Available Software 选项 ...

  8. HDU 3172 Virtual Friends 并与正确集中检查 -秩

    ll T; while(~scanf("%d",&T)){ while(T--) { = = ... 思路: 用秩合并,看了题解才发现 if(fx == fy)要输出当前集 ...

  9. glibc 内存申请和释放及堆连续检查

    C语言有两种内存申请方式: 1.静态申请:当你声明全局或静态变量的时候,会用到静态申请内存.静态申请的内存有固定的空间大小.空间只在程序开始的时候申请一次,并且不再释放(除非程序结束). 2.自动申请 ...

  10. mysql主从配置及其读写分离

    mysql主从配置意思就是一个主mysql服务器,一个从mysql服务器,一共要用到两台服务器.主服务器新增一个账号专门让从服务器来访问同步工作,主从配置完成后,主服务器主要就是新增和update操作 ...