java-运算符

本文最后更新于2022.04.08-14:13,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥

位运算符

Java 定义的位运算(bitwise operators )直接对整数类型的位进行操作,这些整数类型包括long,int,short,char,and byte ,用于操作二进制。包括有“&,|,^,~,<<,>>,>>>”

&:按位与,“只有两个都是1,结果才是1。”

|:安位或,“只要有一个1,结果就是1。”

^:按位异或,“相同的为0,不同的为1。”

~:按位取反,“1就是0,0就是1。”

<<:按位左移,“表示将二进制向左位移,右边填0。”

>>:按位右移,“表示将二进制向右位移,左边填符号位。”

>>>:无符号右移动,“表示将二进制向右位移,左边填0。”

Java位运算符计算操作实例

1.与运算符

与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。

public class data13
{
	public static void main(String[] args) {
		int a=129;
		int b=128;
		System.out.println("a 和b 与的结果是:"+(a&b));
	} 
}

运行结果
a 和b 与的结果是:128
下面分析这个程序:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

2.或运算符

或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0,下面看一个简单的例子。

public class data14
{
	public static void main(String[] args)
	{
		int a=129;
		int b=128;
		System.out.println("a 和b 或的结果是:"+(a|b));
	}
}

运行结果
a 和b 或的结果是:129
下面分析这个程序段:
a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。

3.非运算符

非运算符用符号“~”表示,其运算规律如下: 如果位为0,结果是1,如果位为1,结果是0,下面看一个简单例子。

public class data15
{
	public static void main(String[] args)
	{
		int a=2;
		System.out.println("a 非的结果是:"+(~a));
	}
}

4.异或运算符

异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个简单的例子。

public class data16
{
	public static void main(String[] args)
	{
		int a=15;
		int b=2;
		System.out.println("a 与 b 异或的结果是:"+(a^b));
	}
}

运行结果
a 与 b 异或的结果是:13
分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。

算术运算符

算术运算符他就是数学中的 + - * / 除了这些之外Java中还有一种算术运算符:% 取余(取膜) ,% 他可以叫取余也可以说是取膜两种叫法都可以。

分类

双目运算符(加)+,(减)-,(乘)*,(除)/,(求余)%

1. 这些运算符的运算对象可以是byte、short、int、long、float、double、char类型,其中char类型在运算时被自动转为int型。例:

public class Test1{
	public static void main(String arg[]){
		int A = 10;
		char B = 'B';
		System.out.println(A+B);
	}
}

结果: 76

2. 在Java中,整数被0除或对0取余属于非法运算,将抛出AtrthemticExcerption。

3. 求余运算(%)的两个运算对象不但可以是整数,也可以是浮点类型;不但可以是正整数,也可以是负整数,其计算结果的符号与求余运算福左侧的运算对象符号一致。例:

public class Test2{
	public static void main(String arg[]){
		float A = 10.01f;
		float B = 2.33f;
		System.out.println(A%B);
	}
}

结果:0.6900053

4. 如果参与除法运算的两个运算对象都属于整型,则运算为整除运算,若希望得到小数部分的商值则需要对其中一个运算对象的类型作强制转换。例:

public class Test3{
	public static void main(String arg[]){
		int A = 10;
		int B = 3;
		System.out.println(A/(float)B);//强制转换
	}
}

结果:3.3333333

5. 运算符“+”的运算对象可以使String,它的操作含义是将两个字符串连接。如果其中一个对象为其他类型,则会自动将这个运算对象转换成字符串,然后再进行字符串的连接。例:

public class Test4{
	public static void main(String arg[]){
		System.out.println("20+12/3="+(20+12/3));
	}
}

结果:20+12/3=24

单目运算符+(正),-(负),++(自增),--(自减)

自增自减这个东西,老是容易混淆,其实我们在编程时大可不必用这些容易混淆的东西。不过还是来区分一下。简单的区分方法就是,看++、--在前面还是在后面,在前面则先自增、自减,在后面则先参与运算,再自增自减。例子如下:

假设x为100
(x++)-5*6这个表达式的值为70,x值为101(x参与运算后再自增)
++x)-5*6这个表达式的值为71,x的值为101(x子增厚再参与运算)
自增自减虽然简洁,却会减少程序的可读性,因此还是少用为妙。

实例

int i=6,j,k,m,n;
j = +i; //取原值,即j=6
k = -i; //取负值,即k=-6
m = i++; //先m=i,再i=i+1,即m=6,i=7
m = ++i; //先i=i+1,再m=i,即i=7,m=7
n = j--; //先n=j,再j=j-1,即n=6,j=5
n = --j; //先j=j-1,再n=j,即j=5,n=5

7 / 3 //整除,运算结果为2

7.0 / 3 //除法,运算结果为2.33333,即结果与精度较高的类型一致

7 % 3 //取余,运算结果为1

7.0 % 3 //取余,运算结果为1.0

-7 % 3 //取余,运算结果为-1,即运算结果的符号与左操作数相同

7 % -3 //取余,运算结果为1,即运算结果的符号与左操作数相同

关系运算符

java里的关系运算符有这么几种:大于(>)、小于(<)、等于(==)、不等于(!=)、大于等于(>=)、小于等于(<=),他们运算的结果是个boolean值,关系式成立为true,不成立为false。

运算符分类

例子一

编号 关系运算符 说明
1 > 大于
2 < 小于
3 == 等于
4 != 不等于
5 >= 大于或等于
6 <= 小于或等于
12 > 4; //结果是true
12 != 4; //结果是true
12 < -4; //结果是false
12 == 4; //结果是false
12.3 > 4.5; //结果是true
'a' <= 'k'; //结果是true ,char字符型比较的是ASCII码,a~z的ASCII码值是97~122,A~Z的ASCII码值是65~90
'A' < 'G; //结果是true
'a' == 'm'; //结果是false 再来看看布尔类型的比较吧,boolean 型数据只能比较= =或!=,不能比较大小。
boolean a = true;
boolean b = false;
System.out.println(a > b); //无法通过编译
System.out.println(a == b); //结果是false
System.out.println(a != b); //结果是true

例子二

System.out.println("9.5<8 :"+(9.5<8)); 
System.out.println("8.5<=8.5:"+(8.5<=8.5)); 
System.out.println("a~z:"+((int)'a')+"~"+((int)'z')); System.out.println("A~Z:"+((int)'A')+"~"+((int)'Z'));
 System.out.println("'A' < 'a':"+('A' < 'a'));//字符'A'的Unicode编码值小于字符'a'

输出结果为:

9.5<8 :false
8.5<=8.5:true
a~z:97~122
A~Z:65~90
'A' < 'a':true

注: boolean类型只能比较相等和不相等,不能比较大小;

>=的意思是大于或等于,两者成立一个即可,结果为true,<=亦如此;

判断相等的符号是两个等号,而不是一个等号,这个需要特别小心。

实际代码中,数值、变量以及运算结果都可以直接参与比较,只是程序中为了增强可读性,有些时候需要将比较分开进行书写。

比较运算符是程序设计中实现数据比较的基础,也是很多逻辑实现的基础,在程序逻辑中,经常通过比较一定的条件,来判断后续的程序该如何执行。

条件运算符

符号 条件 描述
&& 条件1&&条件2 仅仅两个相同的为真,结果为真
|| 条件1||条件2 只要两个条件有一个为真,结果为真
! !条件 条件为真,结果为假;反之相反

 区别:&&     ||    短路与   短路或

  • a && b:当a的判断为假时,b不会再继续执行
  • a || b:当a的判断为真时,b不会再继续执行
  • a & b:当a的判断为假时,b会再继续执行
  • a | b:当a的判断为真时,b会再继续执行

三元运算符

语法:条件1?"表达式a":"表达式b";

当条件1为真时,结果为表达式a

当条件1为假时,结果为表达式b

ps:(js中=与===  console.log("1"===1)为false;console.log("1"==1)为true)

运算符的优先级

  1. 最高的优先级:小括号即( )
  2. 最低的优先级:赋值运算符即=

优先级顺序:

!>算数运算符>比较运算符>&&>||

阅读剩余
THE END