1、 放在操作数的前面,先自增或者自减,然后再参与运算。 放在操作数的后面,先参与运算,再自增或者自减。 作用:就是对变量进行自增1或者自减1。class OperatorDemo2 public static void main(String args) /定义两个变量 int x = 3; int y = 4; /字符串的拼接 /System.out.println(x:+x);y:+y); System.out.println(+x+,y: /单独使用 /x+; /y-; +x; -y; /System.out.println(x); /意外的类型,常量是不可以这样做的 /System.ou
2、t.println(10+);-); /参与运算使用 int a = 3; int b = 4; /int c = a+; /int d = b-; int c = +a; int d = -b;a:+a); /4, 4b:+b); /3, 3c:+c); /3, 4d:+d); /4, 3 3 +的正确用法 +的用法:加法正号 C:字符串连接符class OperatorDemo3 /加法 System.out.println(3+4); /正号 System.out.println(+4); System.out.println(a+1); /这里是加法 /字符串连接符 System.ou
3、t.println(hello+1+4 +,- +,-的练习题 第一题: int a = 10; int b = 10; int c = 10; a = b+; c = -a; b = +a; a = c-; 请分别计算出a,b,c的值 第二题: int x = 4; int y = (x+)+(+x)+(x*10); 请分别计算出x,y的值class OperatorTest int a = 10; int b = 10; int c = 10; a = b+; /a=10,b=11,c=10 c = -a; /a=9,b=11,c=9 b = +a; /a=10,b=10,c=9 a =
4、c-; /a=9,b=10,c=8- int x = 4; int y = (x+)+(+x)+(x*10); /4+6+60 /x=5,65 赋值运算符 赋值运算符: 基本的赋值运算符:= 把=右边的数据赋值给左边。 扩展的赋值运算符:+=,-=,*=,/=,%= += 把左边和右边做加法,然后赋值给左边。 /定义一个变量 int x = 10; /其他用法 int a,b; a = b = 10; System.out.println(a); System.out.println(b);- int y = 10; y += 20; System.out.println(y); 面试题: s
5、hort s=1;s = s+1;s+=1; 上面两个代码有没有问题,如果有,那里有问题。 为什么第二个木有问题呢? 扩展的赋值运算符其实隐含了一个强制类型转换。 s += 1; 不是等价于 s = s + 1; 而是等价于 s = (s的数据类型)(s + 1); /short s = 1; /s = s + 1; /System.out.println(s); short s = 1; s += 1; /好像是 s = s + 1; System.out.println(s);6 比较运算符 比较运算符: =,!=,=, y); System.out.println(x b) & (a c
6、); /false & false = false (a true = false System.out.println(a /false | false = false b) | (a /false false = false b) (a b); /!false = true(a true = false!false = false8 &和&区别 &的区别? 同理|和|的区别?最终结果一样。具有短路效果。左边是false,右边不执行。 开发中常用的逻辑运算符:,|,!双与- /boolean b1 = (x+ = 3) & (y+ = 4); /boolean b1 = (+x = 3) &
7、 boolean b1 = (+x = 3) & System.out.println(b1);9 位运算符 位运算符:,|, 注意: 要做位运算,首先要把数据转换为二进制。 System.out.println(3 & 4); System.out.println(3 | 4); System.out.println(3 4); System.out.println(3); 分析:因为是位运算,所以我们必须先把数据换算成二进制。 3的二进制:11 00000000 00000000 00000000 00000011 4的二进制:100 00000000 00000000 00000000
8、00000100位与运算:有0则0。00000000 00000000 00000000 00000100 - 00000000 00000000 00000000 00000000 结果是: |位或运算:有1则1。 |00000000 00000000 00000000 00000100 00000000 00000000 00000000 000001117 位异或运算:相同则0,不同则1。 按位取反运算符:0变1,1变0 11111111 11111111 11111111 11111100 (补码) 补码:11111111 11111111 11111111 11111100 反码:1
9、1111111 11111111 11111111 11111011 原码:10000000 00000000 00000000 00000100-410 的特点 的特点:一个数据对另一个数据位异或两次,该数本身不变。 System.out.println(a b b); /10 System.out.println(a b a); /2011 右移 最高位是0,左边补齐0;最高为是1,左边补齐1无符号右移 无论最高位是0还是1,左边补齐0 请用最有效率的方式写出计算2乘以8的结果? 2 * 8 2 3 / 把左边的数据乘以2的移动次幂 System.out.println(3 把左边的数据除
10、以2的移动次幂 System.out.println(24 /24 / 22 = 24 / 4 = 6 System.out.println(-24 计算出3的二进制: (00)000000 00000000 00000000 0000001100的移动: 计算出24的二进制:11000 原码:10000000 00000000 00000000 00011000 反码:11111111 11111111 11111111 11100111 补码:11111111 11111111 11111111 11101000 11111111 11111111 11111111 11101000 11
11、11111111 11111111 11111111 111010(00) 补码1111111111 11111111 11111111 1110101111111111 11111111 11111111 1110011000000000 00000000 00000000 000110 结果:-6 计算出24的二进制: 0011111111 11111111 11111111 111010(00)12 请自己实现两个整数变量的交换 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。+a+,b: /方式1:使用第三方变量(开发中用的) /* int c = a; a = b; b = c; */ /方式2:用位异或实现(面试用) /左边:a,b,a /右边:a b a = a b; b = a b; /a b b = a /a b a = b /方式3:用变量相加的做法 a = a +