zoukankan      html  css  js  c++  java
  • java基础语言 运算符

    /*
        ++,--运算符的使用:
            单独使用:
                放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
            参与运算使用:
                放在操作数的前面,先自增或者自减,然后再参与运算。
                放在操作数的后面,先参与运算,再自增或者自减。
                
        作用:就是对变量进行自增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);
        }
    }
    /*
        <<:左移    左边最高位丢弃,右边补齐0
        >>:右移    最高位是0,左边补齐0;最高为是1,左边补齐1
        >>>:无符号右移 无论最高位是0还是1,左边补齐0
        
        面试题:
            请用最有效率的方式写出计算2乘以8的结果?
                2 * 8
                
                2 << 3
    
    */
    public class Text {
        public static void main(String[] args) {
            //<< 把<<左边的数据乘以2的移动次幂
            System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
        
            //>> 把>>左边的数据除以2的移动次幂
            System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
            System.out.println(24 >>> 2);
            
            System.out.println(-24 >> 2); 
            System.out.println(-24 >>> 2);
        }
    }
    /*
        计算出3的二进制:11
            00000000 00000000 00000000 00000011
        (00)000000 00000000 00000000 0000001100
            
        >>的移动:    
        计算出24的二进制:11000
            原码:10000000 00000000 00000000 00011000
            反码:11111111 11111111 11111111 11100111
            补码:11111111 11111111 11111111 11101000
            
            11111111 11111111 11111111 11101000
            1111111111 11111111 11111111 111010(00) 补码
            
            补码:1111111111 11111111 11111111 111010
            反码:1111111111 11111111 11111111 111001
            原码:1000000000 00000000 00000000 000110
            
            结果:-6
            
        >>>的移动:
            计算出24的二进制:11000
            原码:10000000 00000000 00000000 00011000
            反码:11111111 11111111 11111111 11100111
            补码:11111111 11111111 11111111 11101000
            
            11111111 11111111 11111111 11101000
            0011111111 11111111 11111111 111010(00)
            
            结果:
    */
    /*
        ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
    */
    public class Text {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            
            System.out.println(a ^ b ^ b); //10
            System.out.println(a ^ b ^ a); //20
        }
    }
    /*
        练习:
            获取两个整数中的最大值
            获取三个整数中的最大值
            比较两个整数是否相同
    */
    public class Text {
        public static void main(String[] args) {
            //获取两个整数中的最大值
            int x = 100;
            int y = 200;
            
            int max = (x > y? x: y);
            System.out.println("max:"+max);
            System.out.println("--------");
            
            //获取三个整数中的最大值
            int a = 10;
            int b = 30;
            int c = 20;
            
            //分两步:
            //A:先比较a,b的最大值
            //B:拿a,b的最大值在和c进行比较
            int temp = ((a > b)? a: b);
            //System.out.println(temp);
            int max1 = (temp > c? temp: c);
            System.out.println("max1:"+max1);
            
            //一步搞定
            //int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
    
            //这种做法不推荐。
            //int max2 = a > b?a > c? a: c:b > c? b: c;
    
            //System.out.println("max2:"+max2);
            System.out.println("--------");
            
            //比较两个整数是否相同
            int m = 100;
            int n = 200;
            
            //boolean flag = (m == n)? true: false;
            boolean flag = (m == n);
            System.out.println(flag);  //false
        }
    }
  • 相关阅读:
    vue 中的虚拟dom
    Vue基操
    表头固定,表的主体设置滚动条,同时解决错位问题
    AngularJS处理服务器端返回的JSON数据的格式问题
    jQuery ajax-param()
    Bootstrap中内联单选按钮
    angularJS中控制器和作用范围
    如何理解MVC?
    CSS3动画简介以及动画库animate.css的使用
    UGUI实现打字的效果
  • 原文地址:https://www.cnblogs.com/sutao/p/7173111.html
Copyright © 2011-2022 走看看