java运算符

java运算符

一、算术运算符

java运算符_第1张图片

  • java中,不同的数据类型,会先转换为同一数据类型再进行运算
  • 与C/C++不同的是,取模运算符%的操作数可以为浮点数,如9.5%3=0.5
注:+a 还有一个功能,如果a是byte,short,char类型,那么a类型将会被提升为int型

另外 java中没有幂运算符,必须采用Java.lang,Math类的pow()方法。如下

double a = Math.pow(2,3); //返回值2^3

Math类提供了大量数学和工程函数,例如pi和e等等,精度也很高,还有平方根,自然对数,三角函数等。

二、关系运算符

关系运算符用来比较两个操作数,由两个操作数和关系运算符构成一个关系表达式,关系运算符的操作结果都是布尔类型的。关系成立就为true,反之为false

java运算符_第2张图片
在java中,任何数据类型(包括基本数据类型和复合类型)都可以通过==或者!= 来比较是否相等,这与C/C++不同

class AriTest 
{
	public static void main(String[] args) 
	{
		char c = 'a';
		int i1 = 97;
		boolean i = (c == i1);
		System.out.println(i);  //返回true
	}
}

三、逻辑运算符

逻辑表达式由逻辑型操作数和逻辑运算符组成,一个或多个关系表达式可以进行逻辑运算。java中逻辑运算符共由6种,其中由5个二元运算符和1个一元运算符。
java运算符_第3张图片

这里来说一下 &&,|| 与 &,| 的差别

  • &&,|| 表示短路与、或运算。表达式求值过程中先求出运算符左边的表达式的值,对于或运算如果左边的表达式的值为true,则整个布尔逻辑表达式就为true,不再对运算符右边的表达式进行运算;同样的,对于与运算,如果左边表达式的值为false ,那么整个逻辑表达式的值就为false,不会对右边的表达式求值。
  • &,| 称为不短路运算,即不管第一个操作数是true 还是false ,他仍要把第二个操作数的值求出,然后再做逻辑运算求出逻辑表达式。

四、位运算符

对于任何一种整数类型的数值,可以直接使用位运算符对这些组成整型的二进制位进行操作。这意味着可以利用屏蔽和置位技术来设置或获得一个数字种的单个位或几位,或将一个位模式向右或向左移动。

位运算符分为位逻辑运算符和位移位运算符

1)位逻辑运算符

位逻辑运算符由3个二元运算符和1个一元运算符。二元运算中,是再两个操作数每个对应位上进行相应的逻辑运算
java运算符_第4张图片
举个例子:
00101101&01001111 = 00001101

2)移位运算符

前面我们知道,java中用补码来表示二进制数,因此位移运算符都是针对整型数的二进制补码进行。

移位运算符把它的第一个操作数向左或向右运动一定的位数
java运算符_第5张图片

注:1)右移运算中右移一位相当于除2取商;在不产生溢出的情况下,左移一位相当于乘2,并且用移位运算实现乘除法比较执行乘除法的速度要快。例如:

-256>>4 结果是-256/(2^4) = -16
128>>1 结果是128/2 = 64
-16<<2 结果是-1622 = -64
128<<1 结果是128*2 = 256

注:2)右移运算符>>与>>>的区别

  • 这>>称为带符号的右移。进行向右移位运算时,最高位移入原来高位的值
    例如:1010… >>2 结果是111010…
  • 这>>>称为无符号右移。进行向右移位运算时,最高位以0填充。例如
    1010…>>>2 结果是001010…

五、赋值运算符

赋值表达式由变量、赋值运算符和表达式组成。赋值运算符把一个表达式的值赋给一个变量。赋值运算符分为赋值运算符“=” 和 扩展赋值运算符两种。在赋值运算符两侧的类型不一致的情况下,如果左侧变量类型级别高,则右侧数据被转化为与左侧相同的高级数据类型后赋给左侧。否则,则需要使用强制类型转换符。 例如:

byte b = 121;
int i = b ; // 自动类型转换
byte c = 13;
byte d = (byte) (b+c); // 强制类型转换
在赋值运算符“=”前面加上其他运算符,则构成扩展赋值运算符。就例如:
  • b%=6 等价于 b = b%6;
  • a + = 3 等价于 a = a+3

六、其他运算符

Java支持的其他运算符使用方法和功能描述如下:
java运算符_第6张图片

七、运算符的优先级

  • 1.后缀运算符 --> [ ],.,(params)expr++,expr–
  • 2.一元运算符 --> ++expr,–expr,+expr,-expr,~,!
  • 3.创建或强制类型转换 new(type)expr
  • 4.乘、除、求余
  • 5 加减
  • 6 移位–> >>,<<,>>>
  • 7 关系运算 --> <,>,<=,>=,instanceof
  • 8 相等性判定, == ,!=
  • 9 按位与 &
  • 10 按位异或 ^
  • 11 按位或 |
  • 12 逻辑与 &&
  • 13 逻辑或 ||
  • 14 条件运算 ?:
  • 15 赋值 = +=,-=,…

做一个小练习把,很常用的,交换两个变量的位置

方式一、定义一个临时变量

int num1 = 10;
int num2 = 20;
int temp = num1;
num1 = num2;
num2 = temp;

方式二 // 只适用于数值型

num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;

方式三、使用位运算符 , 只适用于数值型

假设 k = m^n (异或)
m = k ^ n = (m^n) ^n

num1 = num1 ^ num2;//k
num2 = num1 ^ num2; // 算出来是之前num1的值
num1 = num1 ^ num2; // 这样算出来是之前num2的值

你可能感兴趣的:(java,jvm,c++)