算术运算符
-
-
- / %(取余,模运算) +(连接符)
++(自增:就在原有数据基础上+1,在赋给原有数据) –
- / %(取余,模运算) +(连接符)
-
单独使用时:
++和–放在操作数前面和后面效果一样
a++ a-- ++a --a
参与操作时:
1、放在操作数的前面:先自增或自减,再参与操作
int a = 10;
int b = ++a; b=11 a=11
2、放在操作数的后面:先参与操作,再自增或自减
int a = 10;
int b = a++; b=10 a=11
赋值运算符
+= -= *= /= %=
比较运算符
< > ==
运算完的结果必须是 true 或者 false
逻辑运算符
用于连接,两个 boolean 类型的表达式
&:与
&:符号的运算特点:
true & true = true;
true & false = false;
false & true = false;
false & false = false;
&:运算规律:
&运算的两边只有有一个是 false,结果肯定是 false
只有两边都为 true,结果才是 true
|:或
运算特点
true | true = true;
true | false = true;
false | true = true;
false | false = false;
|:运算规律:
|运算的两边只要有一个是 true,结果肯定是 true
只有两边都为 false,结果是 false
^:异或 :和或有点不一样
运算特点
true ^ true = false;
true ^ false = true;
false ^ true = true;
false ^ false = false;
^异或的运算规律:
^符号的两边结果如果相同,结果是 false
两边的结果不同,结果是 true
!:非运算,判断事物的另一面
&&:
和&运算的结果是一样的。但是运算过程有点小区别
&:无论左边的运算结果是什么,右边都参与运算
&&:当左边为 false 时,右边不参与运算的
||:
和|运算的结果是一样的。但是运算过程有点小区别
|:无论左边的运算结果是什么,右边都参与运算
||:当左边为 true 时,右边不参与运算的
位运算符
一定是涉及到二进制数据
在计算机里,数据的运算是以补码的形式进行的:
1、正数的原反补码相同
2、负数的反码是最高位(符号位)数值不变,其他位(数值位)取反
3、负数的补码是反码末尾加一
4、负数的展现给用户的是原码的十进制的值
&(位与运算符)
有0则0(相当于逻辑运算符里的false)
3: 00000000 00000000 00000000 00000011
& 4: 00000000 00000000 00000000 00000100
===================================================
00000000 00000000 00000000 00000000
结果十进制是:0
|(位或运算符)
有1则1(相当于逻辑运算符里的ture)
3: 00000000 00000000 00000000 00000011
| 4: 00000000 00000000 00000000 00000100
===================================================
00000000 00000000 00000000 00000111
结果十进制是:7
^(位异或运算符)
异或的特殊情况:一个数据对另一个数据按位异或2次,该数据值不变,相同则0,不同则1
3: 00000000 00000000 00000000 00000011
^ 4: 00000000 00000000 00000000 00000100
===================================================
00000000 00000000 00000000 00000111
结果十进制是:7
运用:交换两个int型数据值
a = a ^ b;
/*此时赋值号右边的 a 是 a^b,所以b = a ^ b ^ b 用一个数据对另一个数据按位异或2次,该数据值不变 所以 b = a;
*/
b = a ^ b;
/*因为 a 的值没变,所以 a 还是 a^b,但是 b 已经是 a 了,所以a = a ^ b ^ a*/
a = a ^ b;
System.out.println("a: " + a + " b : "+ b);
~(位取反) 0变1,1变0
0变1,1变0
~ 3: 00000000 00000000 00000000 00000011
===================================================
11111111 11111111 11111111 11111100(负数:补码形式)
11111111 11111111 11111111 11111011 (反码)
10000000 00000000 00000000 00000100 (原码)
结果十进制: -4
<<: 位向左移动,右边补0
以下输出整数3向左移动了2位,结果值为十进制12
把左边的数据2的移动次密: 32^2 = 3*4 = 12
左移动数据会变大
3的二进制:
00000000 00000000 00000000 00000011
向左移动2位:
00000000 00000000 00000000 00001100
十进制为: 12
>>: 位向右移动,最高位是0时(正数),左边补0,最高位是1(负数),左边补1
把左边的数据(正数)/2的移动次幂 24/2^2 = 6
24的二进制: 11000
原码:
00000000 00000000 00000000 00011000
反码:
11111111 11111111 11111111 11100111
补码:
11111111 11111111 11111111 11101000
对补码向右移动2位:
11111111 11111111 11111111 11111010
还需要再求出以后2位后的原码:
补码: 11111111 11111111 11111111 11111010
反码: 11111111 11111111 11111111 11111001
原码: 10000000 00000000 00000000 00000110
此时展现给大家的十进制数是: -6
>>>:无符号位右移动不管最高位是0还是1,统统左边补0
-24的二进制: 11000
原码:
10000000 00000000 00000000 00011000
反码:
11111111 11111111 11111111 11100111
补码:
11111111 11111111 11111111 11101000
无符号位右移2位:
11111111 11111111 11111111 11101000
00111111 11111111 11111111 11111010
补码:00111111 11111111 11111111 11111010
反码:00111111 11111111 11111111 11111010
原码:00111111 11111111 11111111 11111010
结果:十进制 1073741818
三目运算符
int max = a>b?a:b;
//获取三个整数中的较大的整数
键盘录入
实际开发中,数据是变化的,这样带来的好处是程序具有灵活性,可动性
导入包:import java.util.Scanner;
位置:放在class关键字的上方
创建对象:Scanner sc = new Scanner(System.in);
获取数据:int x = sc.nextInt();