栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[JavaSE] 三目运算符$字符串拼接符$位运算符$运算符的优先级别—Day04

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[JavaSE] 三目运算符$字符串拼接符$位运算符$运算符的优先级别—Day04

目录

前言

一.运算符

1. 三目运算符/三元运算符

 三目运算符的深入

2. 字符串拼接符

   运行结果:3abcdef12

3. 位运算符: & 、 |、 ^ 、 <<(左移)、 >>(右移)、 >>>(无符号右移)

经典面试题:            

4. 表达式

5. 运算符的优先级别

总结


前言

运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。


一.运算符

1. 三目运算符/三元运算符

        语法结构:

数据类型 变量名 = (表达式)?值1:值2;

        理解:

                表达式的结果必须是boolean的值
                        true - 将值1赋值给变量 
                        false- 将值2赋值给变量

        例:            

int num = (true)?10:20;
System.out.println(num);

      结果为:10

int num = (false)?10:20;
System.out.println(num);

      结果为:20

案例1:输入两个int值,返回最大值

		Scanner scan = new Scanner(System.in);
		
		System.out.println("输入两个int值,返回最大值");
		System.out.println("请输入第一个数字:");
		int a = scan.nextInt();
		System.out.println("请输入第二个数字:");
		int b = scan.nextInt();
		
		int max = (a>b)?a:b;
		System.out.println(max);

运行结果:

案例2:输入三个int值,返回最大值

		Scanner scan = new Scanner(System.in);
		System.out.println("输入三个int值,返回最大值");
		
		System.out.println("请输入第一个数字:");
		int a = scan.nextInt();
		System.out.println("请输入第二个数字:");
		int b = scan.nextInt();
		System.out.println("请输入第二个数字:");
		int c = scan.nextInt();
		
		int max = (a>b)?a:b;
		max = (max>c)?max:c;
		
		System.out.println(max);

运行结果:

案例3:输入三个int值,从小到大输出

		Scanner scan = new Scanner(System.in);
		System.out.println("输入三个int值,从小到大输出");
		System.out.println("请输入第一个数字:");
		int a = scan.nextInt();
		System.out.println("请输入第二个数字:");
		int b = scan.nextInt();
		System.out.println("请输入第二个数字:");
		int c = scan.nextInt();		
		//最大值
		int max = (a>b)?a:b;
		max = (max>c)?max:c;
		//最小值
		int min = (a 

运行结果:

 三目运算符的深入

扩展面试题1:

int a=5;

System.out.println("a="+((a<5)?10.9:9));

A. 编译错误

B. 10.9

C. 9

D. 以上答案都不对

结果是:答案是D,a=9.0

扩展面试题2:

char x='x';

int i=10;

System.out.println(false?i:x);

System.out.println(false?100:x);

A. 120 x

B. 120 120

C. x 120

D. 以上答案都不对

结果是答案是A,120 x  

扩展面试题3:

        char c = 'x';//ASCII - 120
        System.out.println(false?100:c);//结果为:x
        System.out.println(false?65536:c);//结果为:120

返回值规则:
                1.值1和值2都是数字字面量(常量)的情况,会按照取值范围大的类型转型
                2.值1和值2都是变量的情况,会按照取值范围大的类型转型
                3.值1和值2一个是常量一个是变量的情况:
                    常量如果在变量所属的取值范围内:使用变量类型表示
                    常量如果不在变量所属的取值范围内:使用常量类型表示

2. 字符串拼接符

    运行代码:    

System.out.println(1 + 2 + "abc" + "def" + 1 + 2);

   运行结果:3abcdef12

    规则:  从左往右
                + 如果两侧是数值,该符号为算数运算符
                + 如果有一侧是字符串,该符号为字符串拼接符

3. 位运算符: & 、 |、 ^ 、 <<(左移)、 >>(右移)、 >>>(无符号右移)

& 与:同位比较,两者为1,结果则为1

|  或:同位比较,两者有1,结果就为1

^ 异或:同位比较,两者不同为1,相同为0

<< 左移:整体向左移动n位,用n个0补位

例:

byte b1 = 10;
System.out.println(b1 << 3);//运行结果:80

分析:     

         二进制表达:

              //byte 10:0000,1010
                //int  10:0000,0000,0000,0000,0000,0000,0000,1010
                //<<   3 :0000,0000,0000,0000,0000,0000,0101,0000  读为:80

>> 右移:整体向右移动n位,就用n个最高位补位(正数最高位为0,负数最高位为1)

例:

byte b1 = 10;
System.out.println(b1 >> 3);//运行结果为:1

正数分析:     

         二进制表达:

               //byte 10:0000,1010
                //int  10:0000,0000,0000,0000,0000,0000,0000,1010
                //>>   3 :0000,0000,0000,0000,0000,0000,0000,0001  读为:1

例:

 byte b2 = -10;
 System.out.println(b2 >> 3);//运行结果为:-2

负数分析:     

         二进制表达:

                //byte -10:1111,0110
                //int  -10:1111,1111,1111,1111,1111,1111,1111,0110
                //>>   3  :1111,1111,1111,1111,1111,1111,1111,1110
             

>>> 无符号位右移:整体向右移动n位,就用n个0补位

例:

byte b2 = -10;
System.out.println(b2 >>> 3);//536870910

负数分析:     

         二进制表达:

        //byte -10:1111,0110
        //int  -10:1111,1111,1111,1111,1111,1111,1111,0110
        //>>>  3  :0001,1111,1111,1111,1111,1111,1111,1110

经典面试题:            
//面试题1:用最有效率的方式计算2*8
//2   - 0000,0010
//<<3 - 0001,0000
System.out.println(2<<3);


 //面试题2:描述一下代码的运行结果
 // 考点:char类型的取值范围为0~65535,所以char类型向上转型使用0补位
 //-1 int:1111,1111,1111,1111,1111,1111,1111,1111
 //(byte):1111,1111
 //(char): 1111,1111,1111,1111
 //(int) : 0000,0000,0000,0000,1111,1111,1111,1111
  System.out.println((int)(char)(byte)-1);//65535

4. 表达式

        5+6:算数表达式

        5>6:关系表达式

        5|6:位运算表达式

5. 运算符的优先级别


总结

 &、|、^ 符号两侧都是数值,此符号为位运算符

 &、|、^ 符号两侧都是boolean值,此符号为逻辑运算符
 >> 和 >>> 在移动正数时没有区别

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/837563.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号