自己实现 等价 强制类型转换 logs amp 不同 rgs 定义
- /*
- ++,--运算符的使用:
- 单独使用:
- 放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
- 参与运算使用:
- 放在操作数的前面,先自增或者自减,然后再参与运算。
- 放在操作数的后面,先参与运算,再自增或者自减。
- 作用:就是对变量进行自增1或者自减1。
- */
- public class Text3 {
- public static void main(String[] args) {
- //定义两个变量
- int x = 3;
- int y = 4;
- //单独使用
- //x++;
- //y--;
- ++x; --y;
- System.out.println("x:" + x + ",y:" + y); //x++或者++x,单独使用时,输出的值都是一样,这里为4;y--或者--y,单独使用时,输出的值都是一样,这里为3
- System.out.println("-------------------");
- //参与运算使用
- int a = 3;
- int b = 4;
- //int c = a++;
- //int d = b--;
- int e = ++a;
- int f = --b;
- System.out.println("a:" + a); //4
- System.out.println("b:" + b); //3
- //System.out.println("c:"+c); //3
- //System.out.println("d:"+d); //4
- System.out.println("e:" + e); //4
- System.out.println("f:" + f); //3
- }
- }
- /*
- ++,--的练习题
- 第一题:
- 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的值
- */
- public class Text3 {
- public static void main(String[] args) {
- 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 = c--; //a=9,b=10,c=8
- System.out.println("a:" + a); //9
- System.out.println("b:" + b); //10
- System.out.println("c:" + c); //8
- System.out.println("--------------");
- int x = 4;
- int y = (x++) + (++x) + (x * 10);
- //4+6+60
- //x=5,6
- System.out.println("x:" + x); //6
- System.out.println("y:" + y); //70
- }
- }
- /*
- 面试题(可能性大):
- short s=1;s = s+1;
- short s=1;s+=1;
- 上面两个代码有没有问题,如果有,那里有问题。
- 为什么第二个木有问题呢?
- 扩展的赋值运算符其实隐含了一个强制类型转换。
- s += 1;
- 不是等价于 s = s + 1;
- 而是等价于 s = (s的数据类型)(s + 1);
- */
- public class Text4 {
- public static void main(String[] args) {
- //short s = 1;
- //s = s + 1;
- //System.out.println(s); //损失精度,
- short s = 1;
- s += 1; //好像是 s = s + 1;
- System.out.println(s); //2
- }
- }
- /*
- 位运算符:
- &,|,^,~
- <<,>>,>>>
- 注意:
- 要做位运算,首先要把数据转换为二进制。
- */
- public class Text4 {
- public static void main(String[] args) {
- //&,|,^,~
- int a = 3;
- int b = 4;
- System.out.println(3 & 4); //0
- System.out.println(3 | 4); //7
- System.out.println(3 ^ 4); //7
- System.out.println(~3); //-4
- }
- }
- /*
- 分析:因为是位运算,所以我们必须先把数据换算成二进制。
- 3的二进制:11
- 00000000 00000000 00000000 00000011
- 4的二进制:100
- 00000000 00000000 00000000 00000100
- &位与运算:有0则0。
- 00000000 00000000 00000000 00000011
- &00000000 00000000 00000000 00000100
- -----------------------------------
- 00000000 00000000 00000000 00000000
- 结果是:0
- |位或运算:有1则1。
- 00000000 00000000 00000000 00000011
- |00000000 00000000 00000000 00000100
- -----------------------------------
- 00000000 00000000 00000000 00000111
- 结果是:7
- ^位异或运算:相同则0,不同则1。
- 00000000 00000000 00000000 00000011
- &00000000 00000000 00000000 00000100
- -----------------------------------
- 00000000 00000000 00000000 00000111
- 结果是:7
- ~按位取反运算符:0变1,1变0
- 00000000 00000000 00000000 00000011
- ~11111111 11111111 11111111 11111100 (补码)
- 补码:11111111 11111111 11111111 11111100
- 反码:11111111 11111111 11111111 11111011
- 原码:10000000 00000000 00000000 00000100
- 结果是:-4
- */
- /*
- 面试题:
- 请自己实现两个整数变量的交换
- 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
- */
- public class Text4 {
- public static void main(String[] args) {
- int a = 10;
- int b = 20;
- System.out.println("a:" + a + ",b:" + b);
- //方式1:使用第三方变量(开发中用的)
- /*
- int c = a;
- a = b;
- b = c;
- System.out.println("a:"+a+",b:"+b);
- System.out.println("------------");
- */
- //方式2:用位异或实现(面试用)
- //左边:a,b,a
- //右边:a ^ b
- /*
- a = a ^ b;
- b = a ^ b; //a ^ b ^ b = a
- a = a ^ b; //a ^ b ^ a = b
- System.out.println("a:"+a+",b:"+b);
- */
- //方式3:用变量相加的做法
- /*
- a = a + b; //a=30
- b = a - b; //b=10
- a = a - b; //a=20
- System.out.println("a:"+a+",b:"+b);
- */
- //方式4:一句话搞定
- b = (a + b) - (a = b); //b=30-20=10,a=20
- System.out.println("a:" + a + ",b:" + b);
- }
- }
java 基础语言 运算符
来源: http://www.bubuko.com/infodetail-2170411.html