Java运算符

Java运算符

一、算术运算符

Java中的算术运算符和生活中的算数运算基本相似。

运算符 运算 范例 结果
+ +3 +3
- b=4;-b; -4
+ 5+5 10
- 6-4 2
* 3*4 12
/ 5/5 1
% 取余(模) 5%5 0
++ 自增(前) a=2;b++a a=3;b=3
++ 自增(后) a=2;b=a++ a=3;b=2
自减(前) a=2;b–a a=1;b=1
自减(后) a=2;b=a– a=1;b=2
+ 字符串连接 “He”+“llo” “Hello”

举例

在使用算术运算时需要注意运算两侧类型:当两侧类型不统一时,运算结果和较大类型保持一致。

int a = 3;
int b = 5;
int c = a + b; //加法运算
c = a * b; //乘法
c = a / b; //除法运算 结果为零  注意除法运算当两侧类型统一结果仍为运算数据保持一致
c = a % b; //取模运算 ,即求a/b的余值

注意事项

如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。

对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。

“+”除字符串相加功能外,还能把非字符串转换成字符串 。“+”运算符两侧的操作数中只要有一个String类型,一个是基本数据类型时,编译成class文件后,两个操作数就被连接成了一个新的String值:

总结:对于取模运算 m % n :

当 m 等于 n 时: m % n的结果为零。

当 m 大于 n 时: m % n的结果为 m / n 的余数。

当 m 小于 n 时: m % n的结果为 m。

自加自减:

自加(++)自减(–)运算

++:自加,对原有的数据进行+1(如果写在变量前表示先增加1或者减少1再使用)

–:自减,对原有的数据进行-1(如果写在变量后表示先使用再增加1或者减少1)

当在一个运算表达式中包含自加运算时,当自加符号在变量右侧时需要先将变量的值临时保存,然后给变量空间加1,接着用临时变量空间中的值去和其他运算符进行运算。当自加符号在变量左侧时,需要先给变量空间加1,然后把加1后的值和其他运算符进行运算

int a = 4;
int b;
b = a++;
System.out.println("a="+a+",b="+b);

注意:自加自减运算单独存在时,放左放右是没有区别的。

思考下题:

int i = 4;
i = i++;
System.out.println("i = "+i);

六、赋值运算符

赋值运算符号:

= , +=, -=, *=, /=, %=

赋值号的功能是将赋值号右侧的结果存储到左侧变量空间中。

int a = 3;
int b,c,d;
b = c = d = a;// 把a的值赋值给d ,再把d的值赋值给c..b
// 注意:赋值运算符不能拆分(算术运算符+=),自动完成类型转化。

赋值号和算术运算符组合起来的混合运算符,它们即具有算术运算的特定,同时还具有赋值运算的特定。

int a = 4;
a += 3; //相当于 a = a + 3;的运算,即把a空间中的值和3进行加法运算,把和值从新存放到a空间中

注意:赋值号和算数运算符的混合运算属于一个运算符,不能拆分。并且这个符号会完成自动强转动作。

// 思考
short s = 3;
// s = s + 2; s会被提升为int ,计算的结果也是int,s为short类型。需要强转
s = (short)(s + 2);
s += 2;// 赋值运算符 会自动转化   

说明:

s = s + 2//编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。

s += 2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。

七、比较运算符

在生活中经常需要判断数据大小,相等不相等各种操作,在Java中同样也可以判断数据的大小。

比较运算符符号:

>大于 >=大于等于 <小于 <=小于等于 ==相等 !=不等

比较运算符。运算完的结果要么true,要么false。后期学习中会根据比较的结果做出相应逻辑判断。

int a = 4;
int b = 5;
boolean c ;
c = a > b;
System.out.println(b);

public static void main(String[] args) {
     
    boolean flag;
    int number01 = 45;
    flag = (number01*20) > 50;
    System.out.println("比较结果为:"+flag);
    // 比较运算的 等于 是 "=="
}

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。

注2:比较运算符“==”不能误写成“=” 。

八、逻辑运算符

当需要判断某些数据符合某个区间,比如人的年龄符合某一范围等。发现使用比较运算没法完成。Java给我们提供另外一直机制,逻辑运算。逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 & x<6 。

逻辑运算符号

逻辑运算符。用来连接boolean型表达式的。

& : 与

| :或

^ : 异或。

!:非。

&& 短路与 ,即必须满足所有的条件,则返回true

|| 短路或,即只满足其中一个条件即可,则返回true

注:“&&”只要见false就执行结束

“&&”中的“短路”,如果条件为false则后面的代码不再执行

“||”只要见true就执行结束

“||”中的“短路”,如果条件为true则后面的代码不再执行

Java运算符_第1张图片

运算规律

int x = 7;
x>2 & x<5
x<2 | x>5

& :两边都为true,结果是true。否则为false。
     两边只要有一个false。结果必然是falsetrue  &  true = true;		
true  & false = false;
false &  true = false;
false & false = false;

| :两边都为false,结果是false。否则为true。
   两边只要有一个true。结果必然是truetrue  |  true = true;		
true  | false = true;
false |  true = true;
false | false = false;

^ : 异或。
  两边相同为false。两边不同为truetrue  ^  true = false;		
true  ^ false = true;
false ^  true = true;
false ^ false = false;

!:非
非真为假,非假为真
!true = false;&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

注意:&&找到false后面的不执行,||找到true 后面的不执行。

九、位运算符

位运算:主要说的是二进制数位运算。

1、运算符符号

& 按位与运算 ,运算原则:相同二进制数位上数值为1,结果为1,否则结果为0;

3 & 5 先把 3和5以二进制表示,再进行按位于运算:

十进制 二进制 结果(十进制)

3 00000000_00000000_00000000_00000011

5 00000000_00000000_00000000_00000101

-------------------------------------------------------------------------------------------------

& : 00000000_00000000_00000000_00000001 1

所以3 & 5等于 1.

| 按位或运算,运算原则:相同二进制数位上数值为0,结果为0,否则结果为1;

3 | 5 先把 3和5以二进制表示,再进行按位于运算:

十进制 二进制 结果(十进制)

3 00000000_00000000_00000000_00000011

5 00000000_00000000_00000000_00000101

-----------------------------------------------------------------------------------------

| : 00000000_00000000_00000000_00000111 7

所以3 | 5等于 7.

2的0次方 + 2 的1次方 + 2的2次方 = 1 + 2 + 4 = 7

^ 按位异或,运算原则:参与运算的两个数相应位相同则结果为0,异号则为1;

十进制 二进制 结果(十进制)

3 00000000_00000000_00000000_00000011

5 00000000_00000000_00000000_00000101

-----------------------------------------------------------------------------------------

^ : 00000000_00000000_00000000_00000110 6

所以3 ^ 5等于 6.

~ 按位取反,运算原则:二进制数位上0变1,1变0;

十进制 二进制 结果(十进制)

5 00000000_00000000_00000000_00000101

-----------------------------------------------------------------------------------------
: 11111111_11111111_11111111_1111010 -6

所以~5等于 -6.

左移操作“<<”:将运算数的二进制码整体左移指定位数,左移之后的空使用“0”来补充,移出去的二进制数忽略不计。

9 << 2 :

十进制 二进制 结果(十进制)

9 00000000_00000000_00000000_00001001

-----------------------------------------------------------------------------------------

00000000_00000000_00000000_0000100100 36

所以9<<2等于 36.

规律:<<:相当于给原数乘以2的倍数

右移操作“>>”:将运算数的二进制码整体右移指定位数,右移之后的空使用“符号位”来补充。移出去的二进制数忽略不计。若是正数使用“0”补充;若是负数使用“1”补充;

9 >>2 :

十进制 二进制 结果(十进制)

9 00000000_00000000_00000000_00001001

-----------------------------------------------------------------------------------------

​ 0000000000_00000000_00000000_00001001 2

所以9>>2等于 2.

规律:>>:相当于给原数除以2的倍数

-6 >> 2:

十进制 二进制 结果(十进制)

-6 11111111_11111111_11111111_1111010

-----------------------------------------------------------------------------------------

​ 1111111111_11111111_11111111_1111010

所以-6>>2等于 -2.

无符号右移">>>":将运算数的二进制码整体右移指定位数,右移之后的空使用“0”来补充

2、位运算应用

需求1:最有效率运算2乘以8.通过位移运算。2<<3

需求2,对两个整数变量的值进行互换(不需要第三方变量)

// 任何一个数^一个数两次得到它本身
// 通过第三方变量的形式进行置换。
int a = 3, b = 7;
int temp = a;
a = b;
b = temp;

// 通过和的形式。有个弊端,两个数据较大,可能会超出int范围。
a = a + b;//a = 3 + 7;
b = a - b;//b = 3 + 7 - 7; b = 3;
a = a - b;//a = 3 + 7 - 3;  a = 7;

// 技巧。异或。
a = a ^ b;// a = 3 ^ 7;
b = a ^ b;// b = 3 ^ 7 ^ 7;
a = a ^ b;// a = 3 ^ 7 ^ 3;

你可能感兴趣的:(java)