码迷,mamicode.com
首页 > 编程语言 > 详细

java基础语言 运算符

时间:2017-07-14 23:59:10      阅读:427      评论:0      收藏:0      [点我收藏+]

标签:计算   过程   print   实现   反码   强制类型转换   注意   练习题   static   

/*
    ++,--运算符的使用:
        单独使用:
            放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
        参与运算使用:
            放在操作数的前面,先自增或者自减,然后再参与运算。
            放在操作数的后面,先参与运算,再自增或者自减。
            
    作用:就是对变量进行自增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基础语言 运算符

标签:计算   过程   print   实现   反码   强制类型转换   注意   练习题   static   

原文地址:http://www.cnblogs.com/sutao/p/7173111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!