一、算术运算符

interger java 加法 java中加法_操作数


1.对于+运算符的功能:

加法运算

正数表示

字符串拼接:操作数1 + 操作数2 两个操作数中,只要至少有一个是字符串,+操作执行的就是字符串拼接,如"hello" + ‘a’ + 1 = “helloa1”

2.对于/运算符:整数相除只能得到整数

3.%求余(取模)

4.++和-- :
单独使用效果是自增或自减后的结果, 若参与运算,位置不同,效果不同。
“++”: 让一个变量自增1 a++ <-> a = a + 1
“- -” : 让一个变量的值自减1 b- -: <-> b = b - 1
注意事项:
(1)++,–,他们都既可以放在变量之后(a++ b–), 也可以被放在变量之前(++a, --b) 。
(2) 当++ 或者 --,他们不参与任何其他运算的时候,++或–,在变量前或者变量之后是没有区别的。
(3) 但是一旦++或者–,参与其他运算的时候,它们就会有一点区别 对于++而言:
++在后, a++ + 1 ,当++在后的时候,参与运算的时候,首先a原本的值参与运算,a的值再自增1 ;
++在前,++a + 1 ,参与运算的时候,首先自增,再参与运算。

如,a = 3,a++ + 1的结果是4,++a + 1的结果是5。

对于–而言:–在前和–在后,区别与 ++在前和++在后同。

二、赋值运算符

符号:= , +=, -=, *=, /=, %=
其中=为基本的赋值运算符,其他的为扩展的赋值运算符

+=, -=, *=, /=, %=: 复合赋值运算
a += 3 等价于 a 执行相应运算,之后的结果在赋值给a,即 a = a + 3

三、比较运算符

interger java 加法 java中加法_运算符_02


== 比较相等

!= 比较是否不相等

大于 >

小于 <

大于等于 >=

小于等于 <=

注意: 不要把 == 写成 =,一个是比较是否相等,一个是赋值

关系运算符运算的结果:true or false

四、逻辑运算符

interger java 加法 java中加法_操作数_03


&(与运算):

true & false = false

true & true = true

false & true = false

false & false = false

只要至少有一个操作数是false,结果就是false,

只有当两个操作数都是true的时候,&运算的结果,才是true

| (或运算) :
true | false = true
true | true = true
false & true = true
false | false = false
只要至少有一个操作数是true,结果就是true,
只有当两个操作数都是false,|运算的结果才是false

! (非): !true = false !false = true

^(异或运算): 相同为false, 不同为true
true ^ true = false
false ^ false = false
true ^ false = true
false ^ true = true

注意事项:
1.关于数值范围的描述的表达,比如 1 < a < 10
错误的表达方式 c = 1 < a < 10;
原因是1<a的结果是true或者false,boolean型的变量不能和int型的变量进行比较。
正确的表达方式 c = a > 1 && a < 10;

2.&& VS & 都是与运算,他们有什么区别呢?

&& 与运算比较智能, 当它发现&&运算符的第一个操作数结果已经是false,
第二个操组数(对应的表达式)不去管他,直接得到结果&&的结果false。
& 这种与运算,比较的死板,即使&第一个操作数,它已经是false,此时它仍然会计算第二个操作数(表达式),在把计算好的两个操作数的结果,做与运算,得到最终结果。

3.&&: 有短路效果,当第一个操作数为false,直接得出与运算的结果。
或运算符只要至少有一个操作数是true,结果就是true。||或运算比较智能,有短路效果。

五、位运算符

interger java 加法 java中加法_interger java 加法_04

位运算符: 针对变量的二进制位来进行运算。

interger java 加法 java中加法_interger java 加法_05


移位运算

a.左移运算符: 3 << 2 = 3 * 2 * 2 = 12

左移一位相当于给操作数 * 2(适用场景:左移之后的结果仍然在相应数据类型的表示范围之内)

00000000,00000000,00000000,00000011 -> 3

移动一位

0000000,00000000,00000000,000000110

再移动一位

000000,00000000,00000000,0000001100 -> 12

b.带符号的移位: -2 >> 1 , 相当于给操作数除以2(只针对,未溢出切且可以被除尽的情况)
对于带符号位的右移运算而言:右移运算,高位补符号位。

c. 无符号右移:移位的动作和带符号数一模一样的,右移之后,高位直接填充0,
无符号右移,同常用来处理正整数,对正整数而言,无符号右移一位相当于除以2。

&: 只针对二进制的一位 0或者1,只有两个二进制都为1的时候结果为1,其余全为0
0 & 1 = 0 , 0 & 0 = 0 , 1 & 0 = 0 ,1 & 1 = 1

|: 只有两位全为0的时候结果才为0
0 | 1 = 1 , 0 | 0 = 0 , 1 | 0 = 1, 1 | 1 = 1

^: 相同为0,不同为1
0 ^ 1 = 1 , 0 ^ 0 = 0 , 1 ^ 0 = 1, 1 ^ 1 = 0
性质:
1. 一个数和它自己异或运算的结果:a ^ a = 0
2. 任何数和0做异或运算结果都是其本身:0 ^ a = a

~: 按位取反(包括符号位)
~6 = -7
0110(6的补码) ->1001(-7的补码)

六、运算符优先级(从高到低)

interger java 加法 java中加法_与运算_06


如果在程序中,要改变运算顺序,可以使用()。

七、三目运算符

关系表达式 ?表达式1 : 表达式2
如果关系表达式的结果为true,3目运算的结果,就是表达式1的值
如果关系表达式的结果为false,3目运算的结果,就是表达式2的值

如,a = gender ? “男” : “女”,如果gender=true,则a的值是“男”,否则是“女”。

八、键盘录入数据

我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,我准备把数据改进为键盘录入,提高程序的灵活性。 如何实现键盘录入数据呢?

导包语句(放到class定义的上面):
import java.util.Scanner;
创建对象
Scanner sc = new Scanner(System.in);
从键盘输入读取数据
int x = sc.nextInt();
Scanner用完之后记得关闭
sc.close();

#个人学习记录,如发现有错误之处,欢迎与我交流