java运算符

Java运算符按功能可分为:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。

算数运算符

算术运算符包括通常的加(+)、减(-)、乘(*)、除(/)、取模(%),完成整数型和浮点型数据的算术运算。

        int a = 10;
        int b = 20;
        int c = 23;

        //算术运算符(加减乘除)
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a-c);

关系运算符

关系运算符用来比较两个值,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于()和不等于(!=)6种。关系运算符都是二元运算符,也就是每个运算符都带有两个操作数,运算的结果是一个逻辑值。Java允许“”和“!=”两种运算符用于任何数据类型。例如,既可以判断两个数的值是否相等,也可以判断对象或数组的实例是否相等。判断实例时比较的是两个对象在内存中的引用地址是否相等。

        int a = 10;
        int b = 20;
        int c = 23;

       //关系运算符返回的结果是正确、错误 ,布尔值
        System.out.println(a<b);
        System.out.println(a>b);
        System.out.println(a!=b);
        System.out.println(a==b);
        System.out.println(a%b);
        System.out.println(a%c);
        System.out.println(c%a);

逻辑运算符

逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。前两个是二元运算符,后一个是一元运算符。

public static void main(String[] args) {
        //逻辑预算法 与或非 && || !
        boolean a = true;
        boolean b = false;
        //&&两个变量都是true 结果才会是true
        System.out.println("a&&b:"+(a&&b));

        //两个变量只要一个为真,结果为真
        System.out.println("a||b:"+(a||b));

        //结果取反
        System.out.println("!(a&&b):"+!(a&&b));

        int c =5;
        boolean d = (c<3)&&(c++<4);//&&只要前面部分为假,就不会执行后面的部分
        System.out.println(c);
        System.out.println(d);
}

位运算符

位运算符用来对二进制位进行操作,包括按位取反(~)、按位与(&)、按位或(|)、异或(^)、右移(>>)、左移(<<)和无符号右移(>>>)。位运算符只能对整数型和字符型数据进行操作。

  1. 取反(~)

    参加运算的一个数据,按二进制位进行“取反”运算。

    运算规则:~1=0; ~0=1;

    即:对一个二进制数按位取反,即将0变1,1变0。

  2. 按位与(&)

    参加运算的两个数据,按二进制位进行“与”运算。

    运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1,结果才为“1,否则为0。

    例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3 & 5的值得1。

  3. 按位或(|)

    参加运算的两个对象,按二进制位进行“或”运算。

    运算规则:0 | 0=0; 0 | 1=1; 1 | 0=1; 1 | 1=1;

    即 :参加运算的两个对象只要有一个为1,其值为1。

    例如:3 | 5,即 0000 0011 | 0000 0101 = 0000 0111 因此,3 | 5的值得7。

  4. 异或(^)

    参加运算的两个数据,按二进制位进行“异或”运算。

    运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

    即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

  5. 左移(<<)

    运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。例如: 12345 << 1,则是将数字12345左移1位:

​ 位移后十进制数值变成:24690,刚好是12345的二倍,所以有些人会用左位移运算符代替乘2的操作,但是这并不代表是真的就是乘 以2,很多时候,我们可以这样使用,但是一定要知道,位移运算符很多时候可以代替乘2操作,但是这个并不代表两者是一样的。

​ 思考一下:如果任意一个十进制的数左位移32位,右边补位32个0,十进制岂不是都是0了?当然不是!!! 当int 类型的数据进行左移 的时候,当左移的位数大于等于32位的时候,位数会先求余数,然后再进行左移,也就是说,如果真的左移32位 12345 << 32 的时 候,会先进行位数求余数,即为 12345<<(32%32) 相当于 12345<< 0 ,所以12345<< 33 的值和12345<<1 是一样的,都是 24690。

  1. 右移(>>)

    同样,还是以12345这个数值为例,12345右移1位: 12345>>1。

右移后得到的值为 6172 和int 类型的数据12345除以2取整所得的值一样,所以有些时候也会被用来替代除2操作。另外,对于超过32位的位移,和左移运算符一样,,会先进行位数求余数。

  1. 无符号右移(>>>)

    无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的。以下是-12345二进制表示:

img

​ 对于源码、反码、补码不熟悉的同学,请自行学习,这里就不再进行补充了讲解了,这里提醒一下,在右移运算符中,右移后补0,是 由于正数 12345 符号位为0 ,如果为1,则应补1。

        int number = 10;
        int number1 = 20;

        System.out.println(""+number+number1);
        //结果为1020  字符串在前面表示拼接
        System.out.println(number+number1+"");
        //结果为30 字符串在后面,无法进行拼接,直接运算前面的部分

赋值运算符

赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量,除了“=”,其它的都是特殊的赋值运算符,以“+=”为例,x += 3就相当于x = x + 3,首先会进行加法运算x+3,再将运算结果赋值给变量x。-=、*=、/=、%=赋值运算符都可依此类推。

条件运算符

  1. 条件运算符( ? : )也称为 “三元运算符”或“三目运算符”。
  2. 语法形式:布尔表达式 ? 表达式1 :表达式2。
  3. 运算过程:如果布尔表达式的值为 true ,则返回 表达式1的值,否则返回 表达式2 的值。
posted @ 2021-07-09 20:39  海风不咸  阅读(185)  评论(0)    收藏  举报