Java学习日志Day3_逻辑双与与逻辑双或、位运算符、三元运算符(三目)、流程控制语句(顺序结构语句和选择结构语句)

一、扩展的逻辑运算符(逻辑双与、逻辑双或)

  1. 逻辑双与&&和逻辑单与&的区别:
    ①. 共同点:当多个条件,有一个不满足,就不成立!并列关系:有false,则false
    ②. 区别:
    逻辑单与&:无论符号左边的表达式是true还是false,右边都需要执行
    逻辑双与&&: 具有短路效果!如果符号左边的表达式为false,则右边的表达式不会执行了!
    总结:双与&&比单与&的逻辑性更强一些,开发经常使用逻辑双&& !

  2. 逻辑双或||
    左边的表达式如果为true,右边不执行!

二、位运算符:针对具体的数据值进行运算!

  1. 分类:
    位与&:有0,则0;
    位或|:有1,则1;
    位异或^:相同则为0,不同则为1;
    ~反码:对一个数据进行反码,按位取反(全部0变1,1变0)。

    examples:

      		3--- 二进制数据
     		 			原码--反码--补码  3 
     		   00000000 00000000 00000000 00000011
     		 			原码--反码--补码  4
     		   00000000 00000000 00000000 00000100
     		
     		1). 3&4:有0,则0
     	 	   00000000 00000000 00000000 00000011
       位与&    00000000 00000000 00000000 00000100
       ------------------------------------------------------
     	       00000000 00000000 00000000 00000000 
     	 
     		 结果为0
     	 
     	 	2). 3|4:有1,则1
     	        00000000 00000000 00000000 00000011
        位或|    00000000 00000000 00000000 00000100
        ------------------------------------------------------
     	         00000000 00000000 00000000 00000111	
    
     		 结果为7
     	
     	    3). 3^4:相同则为0,不同则为1		
    
     	          00000000 00000000 00000000 00000011
     	位异或^    00000000 00000000 00000000 00000100
     	-----------------------------------------------
     	           00000000 00000000 00000000 00000111
     	   
     	  	 结果为7
     	  
     	  
     	    4). ~3:0变1,1变0
     	原,反,补相同:
     	
     	00000000 00000000 00000000 00000011 
     ~ --------------------------------------------------------
        最高符号位         			数值位
     	1			1111111 11111111 11111111 11111100  (补码)  
     										        -1
     	1		    1111111 11111111 11111111 11111011   (反码 )
     	
     	1			0000000 00000000 00000000 00000100  (原码)
     	
     		 结果为-4
    
  2. 位移符号:
    1). <<:左移:将数据的补码进行左移动,右边不够的补0,左边多余丢弃掉。
    特点:将 <<符号左边的数据乘以2的移动次幂。

    2). >>:右移 :将数据的补码右移动;如果最高符号位为0,左边补0;如果最高符号位为1,左边补1…
    特点:将>>符号左边的数据,除以2的移动次幂。

    3). >>>:无符号右移:将数据的补码右移动,无论最高符号位为0还是1,左边都补0…

examples:

	1). 2<< 2:
		            将2十进制-----二进制  
		             原码 -- 反码---补码
			00000000 00000000 00000000 00000010      << 2
		  00000000 00000000 00000000 00000010
  	    (00)000000 00000000 00000000 0000001000
  ---------------------------------------------------------
  		    000000 00000000 00000000 0000001000
  		    		  补码---反码---原码
 		 结果就是8			//2左移两位   (2 * 2^2) = 8
	
	
	2). 24 >> 2:
					24-----二进制
					原码,反码,补码
			00000000 00000000 00000000 00011000     >>2
      		0000000000 00000000 00000000 000110(00)
   ---------------------------------------------------------
      		0000000000 00000000 00000000 000110
      				补码,反码,原码
	     结果:6				//24右移两位  // 24 /2 ^ 2  = 6
	
	
	3). -24 >> 2:   
	原码:
	1		0000000 00000000 00000000 00011000
	反码:
	1		1111111 11111111 11111111 11100111 
	+										 1
	--------------------------------------------------------
	补码:
		   11111111 11111111 11111111 11101000        >>2
	     
	       1111111111 11111111 11111111 111010(00)     
		  
		   1111111111 11111111 11111111 111010        补码
	       -								  1
	---------------------------------------------------------
	       1111111111 11111111 11111111 111001        反码
	       1000000000 00000000 00000000 000110        原码
	
		 结果:-6			//-24右移两位   // - 24 / 2 ^ 2 = - 6
	
	4). -24>>> 2:
	
	-24的补码:
			11111111 11111111 11111111 11101000  
			0011111111 11111111 11111111 111010(00)    正数:补码---反码---原码
	-----------------------------------------------------------
	  		0011111111 11111111 11111111 111010			//1,073,741,818
  1. 位异或的特点^:一个数据被另一个数据位异或两次:其值是它本身!

examples:

				4 ^ 10  ^ 10:
				4对应的二进制:原--反--补
				00000000 00000000 00000000 00000100
				10对应的二进制:原--反码--补
				00000000 00000000 00000000 00001010
				4 ^ 10 ^ 10:
				00000000 00000000 00000000 00000100
				00000000 00000000 00000000 00001010
位异或^    	----------------------------------------------
				00000000 00000000 00000000 00001110   补码
位异或^ 			00000000 00000000 00000000 00001010   10的补码
			----------------------------------------------
			    00000000 00000000 00000000 00000100		
		 结果为:4

三、三元运算符(三目)

  1. 格式:
    (表达式)? 执行成立的结果:执行false的结果;

  2. 执行流程:
    1). 首先判断表达式是否成立;
    2). 如果成立,执行成立的结果;
    3). 如果不成立,就false的结果。

  3. 三元运算符和if…else的区别
    区别:三元运算符—运算符:操作的具体的数据进行对比判断;
    能够使用三元操作的,一定能够使用if…else…。

example1:

键盘录入两个数据,判断两个数据是否相等! (true/false:布尔类型) (三元)
//导包
import java.util.Scanner ;
class OperatorDemo{
	public static void main(String[] args){
		//创建文本扫描器对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并录入数据
		System.out.println("请您输入第一个数据:") ;
		int a = sc.nextInt() ;
		
		System.out.println("请您输入第二个数据:") ;
		int b = sc.nextInt() ;
		
		//(表达式)? 执行成立的结果:执行false的结果;
		//boolean flag = (a==b) ? true:false ;
		//改造:== :本身就是一个比较运算符:就是true/false
		boolean flag = a == b ;
		System.out.println(flag) ;
	}
	
}

example2:

键盘录入三个数据,比较数据的最大值:
//导包
import java.util.Scanner ;
class OperatorTest{
	public static void main(String[] args){
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并录入
		System.out.println("请输入第一个数据:") ;
		int a = sc.nextInt() ;
		
		System.out.println("请输入第二个数据:") ;
		int b = sc.nextInt() ;
		
		System.out.println("请输入第三个数据:") ;
		int c = sc.nextInt() ;
		
		//三元运算:
		//方式1
		//1)定义一个中间变量temp: 记录a和b的最大值
		int temp = (a > b) ? a: b ;
		//2)定义max
		int max = (temp > c)? temp : c ;
		System.out.println("max:"+max) ;
		
		System.out.println("------------------------") ;
		
		//方式2:三元运算符嵌套(不推荐)
		int max2 = (a>b) ? ((a>c)? a: c): ((b>c)? b: c) ;
		System.out.println("max2:"+max2) ;

	}
}

四、流程控制语句

  1. 流程控制语句:

    (1). 顺序结构语句(最基本的语句)

     		当前xxx.java文件---jvm 编译  -----> 类名.class(字节码文件)
     		执行程序: java  类名.class;  (编译+运行: 底层原理是一种反射:Java高级部分)
     									后期:反射贯彻于JavaEE
     		jvm调用main方法:代码从上而下依次加载(源顺序)
    

    (2). 选择结构语句:if语句和switch语句
    1). if语句
    三种格式:

    第一种格式:
    ①. 应用场景:针对单个条件进行判断。

     格式:
     	if(表达式){
     		语句;
     	}
    

    ②. 执行流程:
    首先判断表达式是否成立;
    如果成立,则执行语句;
    否则不成立,不会执行!

    ③. 注意事项:
    a. if的后面不能有; if(表达式);{} 错误语法
    有左大括号的地方不能有分号;有分号的地方不能有左大括号;
    b. 如果使用if格式1,里面的语句是条语句,{}是可以省略的!不建议省略!

    第二种格式:
    ①. 应用场景:针对两种情况进行判断。
    ②. 执行流程:
    首先判断表达式是否成立;
    如果成立,执行语句1;
    否则,执行语句2。

 格式2:
	  if(表达式){
		  语句1;
	   }else{
		  语句2;
	   }

第三种格式:
①. 应用场景:针对多个情况进行判断。
②. 执行流程:
首先,判断表达式1是否成立,成立,执行语句1;
否则,判断表达式2是否成立,成立,执行语句2;
否则,判断表达式3是否成立,成立,执行语句3。

	格式3:
		if(表达式1){
			语句1;
		}else if(表达式2){
			语句2;
		}else if(表达式3){
			语句3;
			
			
		...
				
		}else{
			语句n+1 ;
		}

1). switch语句:

格式:
		switch(表达式){
		case 值1:
			语句1;
			break ;
		case 值2:
			语句2;
			break;
		...

		default:
			语句n+1;
			break ;
		}

①. 执行流程:
首先表达式接收一个值,
然后和case语句值1比较,如果成立,执行语句1,break 结束switch,
值1不匹配,判断和值2是否匹配,如果匹配成功,执行语句2,结束switch,


上面case 语句都不成立,
执行default语句,执行语句n+1,结束switch!

②. switch语句的注意事项:
a. case语句的后面只能是常量(Java是一个强类型语言)
前端:javascript :switch语句的case后面可以常量也可以变量。
b. break语句:不要轻易省略掉, 会造成case 穿透现象(此时,
如果跟某个case已经匹配,但是没有语句break,下面的case就不会对比,直接执行语句)

break:结束,中断 :结束switch。
c. switch语句的结束条件:a). 语句break结束;b). 程序默认执行的到末尾!
d. default语句可以在switch语句中的任何位置,不影响执行流程!
当前case后面的都匹配,执行default语句;
如果default语句在语句中的话,break语句不能省略!
如果default语句在switch末尾的话,break语句是可以省略!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

igfff

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

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

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

打赏作者

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

抵扣说明:

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

余额充值