zoukankan      html  css  js  c++  java
  • java基础-操作符

    1.算数操作符:

    +(加)   -(减)   *(乘)   /(除于)

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 10;
            int j = 5;
            int a = i + j;
            int b = i - j;
            int c = i * j;
            int d = i / j;
        }
    }

    %(取模)

    取余数,又叫取模

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 5;
            int j = 2;
            System.out.println(i % j); // 5除以2,余1,输出为1
        }
    }

    ++(自增)   --(自减)

    在原来的基础上增加1或者减少1

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 5;
            System.out.println(i++); // 输出5
            System.out.println(i); // 输出6
    
            int j = 5;
            System.out.println(++j); // 输出6
            System.out.println(j); // 输出6
    
            int m = 5;
            System.out.println(m--); // 输出5
            System.out.println(m); // 输出4
    
            int n = 5;
            System.out.println(--n); // 输出4
            System.out.println(n); // 输出4
        }
    }
    public class HelloWorld {
        public static void main(String[] args) {
            int i = 1;
            int j = ++i + i++ + ++i + ++i + i++;
            System.out.println(i);
            System.out.println(j);
            // 第一步: ++i=2,    i=2,j=2;
            // 第二步: i++=2,    j=4,i=3;
            // 第三步: ++i=4,    i=4,j=8;
            // 第四步: ++i=5,    i=5,j=13;
            // 第五步: i++=5,    j=18,i=6;
        }
    }

    2.关系操作符

    比较两个变量之间的关系。

    >(大于)  >=(大于或等于)  < (小于)  <=(小于或等于)  ==(是否相等)  !=(是否不等)

    public class HelloWorld {
        public static void main(String[] args) {
            int a = 5;
            int b = 6;
            int c = 5;
    
            System.out.println(a > b); // 返回 false
            System.out.println(a >= c); // 返回 true
    
            System.out.println(a == b); // 返回false
            System.out.println(a != b);// 返回true
        }
    }

    3.逻辑运算符

    &长路与 和 &&短路与

    两边的运算单元都是布尔值,都为真时,才为真,任意为假,就为假;

    长路与 两侧,都会被运算,短路与 只要第一个是false,第二个就不进行运算了。

    public class HelloWorld {
        public static void main(String[] args) {
            // 长路与 无论第一个表达式的值是true或者false,第二个的值,都会被运算
            int i = 2;
            System.out.println(i == 1 & i++ == 2); // 无论如何i++都会被执行,所以i的值变成了3
            System.out.println(i);
    
            // 短路与 只要第一个表达式的值是false的,第二个表达式的值,就不需要进行运算了
            int j = 2;
            System.out.println(j == 1 && j++ == 2); // 因为j==1返回false,所以右边的j++就没有执行了,所以j的值,还是2
            System.out.println(j);
        }
    }

    |长路或 和 ||短路或

    两边的运算单元都是布尔值,都为假时,才为假,任意为真,就为真;

    长路或 两侧都会被运算,短路或 只要第一个是true的,第二个就不进行运算了。

    public class HelloWorld {
        public static void main(String[] args) {
            // 长路或 无论第一个表达式的值是true或者false,第二个的值,都会被运算
            int i = 2;
            System.out.println(i == 1 | i++ == 2); // 无论如何i++都会被执行,所以i的值变成了3
            System.out.println(i);
    
            // 短路或 只要第一个表达式的值是true的,第二个表达式的值,就不需要进行运算了
            int j = 2;
            System.out.println(j == 2 || j++ == 2); // 因为j==2返回true,所以右边的j++就没有执行了,所以j的值,还是2
            System.out.println(j);
        }
    }

    !取反

    真变为假;假变为真

    public class HelloWorld {
        public static void main(String[] args) {
            boolean b = true;
    
            System.out.println(b); // 输出true
            System.out.println(!b);// 输出false
        }
    }

    ^异或

    不同,返回真;相同,返回假

    public class HelloWorld {
        public static void main(String[] args) {
            boolean a = true;
            boolean b = false;
    
            System.out.println(a ^ b); // 不同返回真
            System.out.println(a ^ !b); // 相同返回假
        }
    }
    public class HelloWorld {
        public static void main(String[] args) {
            int a = 4, b = 5;
    
            System.out.printf("交换前:a = %d, b = %d
    ", a, b);
            a = a ^ b;
            b = a ^ b;
            a = a ^ b;
            System.out.printf("交换后:a = %d, b = %d
    ", a, b);
        }
    }
    public class HelloWorld {
        public static void main(String[] args) {
            int i = 1;
            boolean b = !(i++ == 3) ^ (i++ == 2) && (i++ == 3);
            System.out.println(b);
            System.out.println(i);
            // 开始 i = 1;
            // !(i ++ == 3) 结果为true,i = 2
            // (i ++ == 2)结果为true,i = 3
            // 此时 !(i ++ == 3) ^ (i ++ == 2) 结果为 false
            // 再执行短与操作,整个表达式结果为 false
            // 注意:(i ++ == 3)表达式未执行
        }
    }

    4.位操作符

    一个整数的二进制表达

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 5;
            String b = (Integer.toBinaryString(i)); // 5的二进制的表达101
            System.out.println(i + " 的二进制表达是: " + b);
        }
    }

    |位或

    有1,则为1

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 5;
            int j = 6;
    
            System.out.println(Integer.toBinaryString(i)); // 5的二进制是101
    
            System.out.println(Integer.toBinaryString(j)); // 6的二进制是110
    
            System.out.println(i | j); // 所以 5|6 对每一位进行或运算,得到 111->7
        }
    }

    &位与

    全为1,则为1

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 5;
            int j = 6;
    
            System.out.println(Integer.toBinaryString(i)); // 5的二进制是101
    
            System.out.println(Integer.toBinaryString(j)); // 6的二进制是110
    
            System.out.println(i & j); // 所以 5&6 对每一位进行与运算,得到 100->4
        }
    }

    ^异或

    不同则为1

    任何数和自己进行异或 都等于 0;任何数和0 进行异或 都等于自己

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 5;
            int j = 6;
    
            System.out.println(Integer.toBinaryString(i)); // 5的二进制是101
            System.out.println(Integer.toBinaryString(j)); // 6的二进制是110
            System.out.println(i ^ j); // 所以 5^6 对每一位进行或运算,得到 011->3
    
            System.out.println(i ^ 0);
            System.out.println(i ^ i);
        }
    }

    ~取非

    1变0;0变1

    取反

    public class HelloWorld {
        public static void main(String[] args) {
            byte i = 5;
    
            System.out.println(Integer.toBinaryString(i)); // 5的二进制是00000101
    
            System.out.println(~i); // 取非即为11111010,即为-6
        }
    }

    <<左移  >>右移

    左移:根据一个整数的二进制表达,将其每一位都向左移动,最右边一位补0
    右移:根据一个整数的二进制表达,将其每一位都向右移动

    public class HelloWorld {
        public static void main(String[] args) {
            byte i = 6;
    
            System.out.println(Integer.toBinaryString(i));// 6的二进制是110
    
            System.out.println(i << 1);// 6向左移1位后,变成1100,对应的十进制是12
    
            System.out.println(i >> 1);// 6向右移1位后,变成11,对应的十进制是3
        }
    }

    >>>带符号右移与无符号右移

    带符号右移 >>
    对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
    对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
    无符号右移>>>
    如果是一个负数,那么对应的二进制的第一位是1
    无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0
    这样就会使得负数在无符号右移后,得到一个正数

    简单的说:
    带符号右移 >> 移动后正的还是正的,负的还是负的,符号不变
    无符号右移>>>移动后,变正的了

    public class HelloWorld {
        public static void main(String[] args) {
            int i = -10;
    
            // -10的二进制是11111111111111111111111111110110
            // 第一位是1,即符号位,代表这是一个负数
            System.out.println(Integer.toBinaryString(i));
    
            // 对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
            // 对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
    
            // -10带符号右移1位,移动后前面补齐1
            // 得到11111111111111111111111111111011
            // 因为第一位是1,所以依然是一个负数,对应的十进制是-5
            int j = i >> 1;
            System.out.println(Integer.toBinaryString(j));
            System.out.println(j);
    
            // -10无符号向右移1位,符号位也会向右移,第一位就变成了0
            // 得到01111111111111111111111111111011,对应的十进制是2147483643
            int k = i >>> 1;
            System.out.println(Integer.toBinaryString(k));
    
            System.out.println(k);
        }
    }

    5.赋值操作

    =  +=  -=  *=  /=  %=  &=  |=  ^=  <<=  >>=  >>>=

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 3;
            i += 2;
            System.out.println(i);
    
            int j = 3;
            j = j + 2;
            System.out.println(j);
    
            int k = 3;
            k += ++k;
            System.out.println(k);
        }
    }

    6.三元操作符

    ?:

    表达式?值1:值2
    如果表达式为真 返回值1;如果表达式为假 返回值2。

    import java.util.Scanner;
    
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("今天是礼拜几?");
            Scanner sc = new Scanner(System.in);
            int x = sc.nextInt();
            String day = (x == 1) ? "礼拜一"
                    : (x == 2 ? "礼拜二"
                            : (x == 3 ? "礼拜三"
                                    : (x == 4 ? "礼拜四" : (x == 5 ? "礼拜五" : (x == 6 ? "礼拜六" : (x == 7 ? "礼拜天" : "输入错误!"))))));
            System.out.println("今天是:" + day);
        }
    }

    7.计算机算术原理

    原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。

    反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 

    补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.。

    5的二进制为 0000 0101
    (原码为0000 0101,反码为0000 0101,补码为0000 0101)

    -5的二进制应该用补码表示,应该为1111 1011(取反加1)
    (原码为1000 0101,反码为1111 1010,补码为1111 1011)

    1.加法

      0000 0101  5

    +  0000 0001  1

    -------------------------

      0000 0110  6

    2.减法

      0000 0001  1

    -   0000 0101  5

    -------------------------

      1111 1100  -4(无符号4(0000 0100)->取反(1111 1011)->加一(1111 1100))

    3.乘法

    对负数进行左移:符号位始终为1,其他位左移

    对正数进行左移:所有位左移,即 <<,可能会变成负数

    对负数进行右移:取绝对值,然后右移,再取相反数

    对正数进行右移:所有位右移,即 >>

    实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果,如:
      a=a*9
    分析a*9可以拆分成a*(8+1)即a*8+a*1, 因此可以改为: a=(a<<3)+a
      a=a*7
    分析a*7可以拆分成a*(8-1)即a*8-a*1, 因此可以改为: a=(a<<3)-a
      关于除法可以类推, 

    public class HelloWorld {
        public static void main(String[] args) {
            int i = 18;
            int j = i * 9;// =i*8+i*1
    
            System.out.println(j);
            System.out.println((i << 3) + i);
        }
    }
    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    【转发】【小程序】微信小程序日常开发中常遇到的错误代码
    正则表达式:看懂正则表达式只需要几个实例就够了
    CSS响应式:根据分辨率加载不同CSS的几个方法,亲测可用
    [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息
    [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库
    [微信小程序] 微信小程序富文本-wxParse的使用
    [AngularJS] “多重路由”嵌套模块——AngularJS“路由”嵌套学习资料教程
    [AngularJS] “路由”的定义概念、使用详解——AngularJS学习资料教程
    学习笔记:JavaScript-进阶篇
    学习笔记:JavaScript-入门篇
  • 原文地址:https://www.cnblogs.com/antao/p/12819038.html
Copyright © 2011-2022 走看看