java中的各种运算符(算术运算符、赋值运算符、逻辑运算符、三元运算符、位移运算符)

运算符

 

一 算术运算符

运算符

对常量和变量进行操作的符号称为运算符

表达式

用运算符把常量或者变量连接起来符号java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。

定义两个int类型的变量a,b,做加法(a + b)

常用运算符


算术运算符

  • 加法运算符(+)
  • 减法运算符(-)
  • 乘法运算符(*)
  • 除法运算符(%)
  • 求余运算符(/)
  • 自增运算符(++)
  • 自减运算符(--)

 

加法运算符

数字参与运算

int a = 10;
int b = 20;
int c = a + b;
System.out.println(c);  //输出30

字符参与加法操作

        char c = 'a';
        char d = 'b';
        System.out.println(c + 10); //107
        System.out.println(c + d); //195
        /**
         * 字符参与加法操作。拿字符在计算机中底层存储对应的数据值(既字符所对应的ASCII码值)参与运算                                         
         * '0'  48
         * 'a'  97
         * 'A'  65
         */

字符串参与加法运算

        String a = "abc";
        String b = "10";
        int c = 10;
        int d = 20;
        System.out.println(a + b);           //abc10
        System.out.println(a + b + c);      //abc1010
        System.out.println(a + b + c +d);   //abc101020
        System.out.println(c + a + b + c);  //10abc1010
        System.out.println(c + d + a + b + c);//30abc1010

 

减法运算符

int a = 20;
int b = 10;
int c = a - b;
System.out.println(c);  //输出10

字符参与减法运算和字符参与加法一样,先转换为相对应的ASCII码值再进行运算。字符串不能直接进行减法运算,否则编译器会报错。

乘法运算符

int a = 2;
int b = 10;
int c = a * b;
System.out.println(c);  //输出20

字符可以转换为相对应的ASCII进行运算,字符串不能进行该运算。

除法运算符

int a = 10;
int b = 2;
int c = 2.0;

int d = a/b;
int e = a/c;

System.out.println(d);    //输出5
System.out.println(e);    //输出5.0,如果要输出有小数点的则要除数或者被除数小数点后面要有0,如果两个都是整数,那么结果是整数。

字符可以转换为相对应的ASCII进行运算,字符串不能进行该运算。

取余运算符

int a = 5;
int b = 2;
int c = 3;
int d = a % b;
int e = a % c;
System.out.println("a % b =" + d);  //输出1
System.out.println("a % e =" + e);  //输出2

字符可以转换为相对应的ASCII进行运算,字符串不能进行该运算。

总结(各种运算符算能运算的对象)

加法:数字、字符、字符串

减法:数字、字符

除法:数字、字符

取余:数字、字符

 

自增自减运算符

        
        int a = 1;
        int b = 1;
        a++;
        ++b;
        System.out.println(a);  //2
        System.out.println(b);  //2

        int c = a++;
        int d = ++b;
        System.out.println(c);  //2
        System.out.println(d);  //3
        System.out.println(a);  //3

解释: 在定义完a,b之后其值都为1,a的自增运算符在后面,b的自增运算符在前面,由于此两个数没有进行任何运算,所以输出值都为2。再看c与d,c的值是在a自增之前的值,也就是说先将值赋予c之后再自增。而b则是先自增再赋值给d。


二 赋值运算符

  • 基本的复制运算符(=)
  • 扩展的赋值运算符(+=,-=,*=,%=)
        int b = 0;
        int c = 0;
        int d = 1;
        int e = 1;
        for (int i = 1; i <= 4; i++) {
            b += i;
            //等价于 b = b + i;
            c -= i;
            //等价于 c = c - i;
            d *= i;
            //等价于 d = d * i;
            e %= i;
            //等价于 e = e % i;
        }
        System.out.println(b);  //10
        System.out.println(c);  //-10
        System.out.println(d);  //24
        System.out.println(e);  //0

注释:这些扩展运算符可以简化代码的书写

 

关系运算符

  • ==
  • !=
  • >
  • >=
  • <
  • <=
        int a = 10;
        int b = 20;
        int c = 10;

        System.out.println(a == b);     //false
        System.out.println(a == c);     //true
        System.out.println("-----------------");
        System.out.println(a != b);     //true
        System.out.println(a != c);     //false
        System.out.println("-----------------");
        System.out.println(a > b);      //false
        System.out.println(a > c);      //false
        System.out.println("-----------------");
        System.out.println(a >= b);     //false
        System.out.println(a >= c);     //true
        System.out.println("-----------------");

注释:这些关系运算符之间的关系只有true和false。

 

逻辑运算符

  • 逻辑与(&)
  • 逻辑或(|)
  • 逻辑异或(^)
  • 逻辑非(!)
  • 双与(&&):短路与,只要左边为false则返回
  • 双或(||):短路或,只要左边判断为true则返回
	        int a = 10;
		int b = 20;
		int c = 30;

		System.out.println((a > b) & (a > c));// false & false
		System.out.println((a < b) & (a > c)); // true & false
		System.out.println((a > b) & (a < c)); // false & true
		System.out.println((a < b) & (a < c)); // true & true
		System.out.println("---------------");
		System.out.println((a > b) | (a > c));// false | false
		System.out.println((a < b) | (a > c)); // true | false
		System.out.println((a > b) | (a < c)); // false | true
		System.out.println((a < b) | (a < c)); // true | true
		System.out.println("---------------");
		System.out.println((a > b) ^ (a > c));// false ^ false
		System.out.println((a < b) ^ (a > c)); // true ^ false
		System.out.println((a > b) ^ (a < c)); // false ^ true
		System.out.println((a < b) ^ (a < c)); // true ^ true
		System.out.println("---------------");
		System.out.println((a > b)); // false
		System.out.println(!(a > b)); // !false
		System.out.println(!!(a > b)); // !!false

三元运算符

格式

       (关系表达式)?表达式1:表达式2;

       如果条件为true,运算后的结果是表达式1;

       如果条件为false,运算后的结果是表达式2;

                int a = 10;
		int b = 20;

		int c = (a > b) ? a : b;
		System.out.println("c:" + c); //10

三 位移运算符

java中有三种移位运算符

     <<      :     左移运算符,num << 1,相当于num乘以2

     >>      :     右移运算符,num >> 1,相当于num除以2

     >>>    :     无符号右移,忽略符号位,空位都以0补齐

        public static void main(String[] args) {
        int number = 10;
        //原始数二进制
        printInfo(number);          //1010
        number = number << 1;       
        //左移一位
        printInfo(number);         //10100
        number = number >> 1;
        //右移一位
        printInfo(number);         //1010
        }
        /**
         * 输出一个int的二进制数
         */
        private static void printInfo(int num){
           System.out.println(Integer.toBinaryString(num));
        }

将结果对齐

43210      位数
--------
 1010      十进制:10     原始数         number
10100      十进制:20     左移一位       number = number << 1;
 1010      十进制:10     右移一位       number = number >> 1;

对于:>>>

 无符号右移,忽略符号位,空位都以0补齐

value >>> num     --   num 指定要移位值value 移动的位数。

无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 

 

 

 

 

你可能感兴趣的:(java,基础)