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

运算符指明对操作数的运算方式。组成表达式的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<b)?a:b;
		min = (min<c)?min:c;
		//中间值
		int mid = a+b+c-max-min;
		
		System.out.println("从小到大输出:");
		System.out.println(min);
		System.out.println(mid);
		System.out.println(max);

运行结果:

 三目运算符的深入

扩展面试题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值,此符号为逻辑运算符
 >> 和 >>> 在移动正数时没有区别

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单^不简单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值