JAVA运算符

JAVA运算符

加减乘除的简写运算符

n+=100;//相当于n=n+100
n-=100;//相当于n=n-100
n*=100;//相当于n=n*100 相除只能得到整数部分,取余使用%
n/=100;//相当于n=n/100

自增自减

对整数进行加1和减1操作

public class Main {
    public static void main(String[] args) {
        int n = 3300;
        n++; // 3301, 相当于 n = n + 1;
        n--; // 3300, 相当于 n = n - 1;
        int y = 100 + (++n); //++写在前面和后面是不一样的,++n表示先加1再引用n,反之。
        System.out.println(y);// 输出y=3401
    }
}

移位运算

  1. 左移:
int n = 7;       // 00000000 00000000 00000000 00000111 = 7
int a = n << 1;  // 00000000 00000000 00000000 00001110 = 14
int b = n << 2;  // 00000000 00000000 00000000 00011100 = 28
int c = n << 28; // 01110000 00000000 00000000 00000000 = 1879048192
int d = n << 29; // 11100000 00000000 00000000 00000000 = -536870912

左移29位时,由于最高位变成1,因此结果变成了负数。

  1. 右移
int n = 7;       // 00000000 00000000 00000000 00000111 = 7
int a = n >> 1;  // 00000000 00000000 00000000 00000011 = 3
int b = n >> 2;  // 00000000 00000000 00000000 00000001 = 1
int c = n >> 3;  // 00000000 00000000 00000000 00000000 = 0

如果对一个负数进行右移,最高位的1不动,结果仍然是一个负数

  1. 还有一种无符号的右移运算,使用>>>,它的特点是不管符号位,右移后高位总是补0,因此,对一个负数进行>>>右移,它会变成正数,原因是最高位的1变成了0
int n = -536870912;
int a = n >>> 1;  // 01110000 00000000 00000000 00000000 = 1879048192
int b = n >>> 2;  // 00111000 00000000 00000000 00000000 = 939524096
int c = n >>> 29; // 00000000 00000000 00000000 00000111 = 7
int d = n >>> 31; // 00000000 00000000 00000000 00000001 = 1
  • byteshort类型进行移位时,会首先转换为int再进行位移。

其实左移实际上就是不断地×2,右移实际上就是不断地÷2。

位运算

&,或|,非~,异或^

异或运算的规则是,如果两个数不同,结果为1,否则为0

布尔运算

  • 比较运算符:>>=<<===!=

  • 与运算 &&

  • 或运算 ||

  • 非运算 !

    短路运算

    1. 因为false && x的结果总是false,无论xtrue还是false,因此,与运算在确定第一个值为false后,不再继续计算,而是直接返回false
    2. 对于||运算,只要能确定第一个值为true,后续计算也不再进行,而是直接返回true

三元运算符

public class Main {
    public static void main(String[] args) {
        int n = -100;
        int x = n >= 0 ? n : -n;//判断n>=0是否成立,true返回n,否则返回-n。
        System.out.println(x);
    }
}

三元运算b ? x : y会首先计算b,如果btrue,则只计算x,否则,只计算y。此外,xy的类型必须相同,因为返回值不是boolean,而是xy之一。

posted @ 2022-04-13 22:21  兔mm  阅读(18)  评论(0编辑  收藏  举报