2019.12.26学习总结

2019.12.26学习总结

一、逻辑运算符

1.基本的逻辑运算符

逻辑单与: & 结论:有false,则false
逻辑单或: | 结论:有true,则true
逻辑异或: ^ 结论:相同为false,不同为true
逻辑非: ! 结论:非true则false,非false则true,偶数非为它本身

2.扩展的逻辑运算符

逻辑双与: && 结论:输出结果跟 & 相同,但是左边为false,则结果为false,右边不执行
逻辑双或: || 结论:输出结果跟 | 相同,但是左边为true,则结果为true,右边不执行

面试题:


```java
int a = 3;
	int b = 4;
		System.out.println("a:"+a);
		System.out.println("b:"+b);
	boolean flag = ((++a == 3) && (--b == 4));

	求a、b 、 flag 的结果。
	++a ,++在前,先算++a,a为4,(++a==3)结果为false&& 左边为false,所以flag的结果为false,右边不执行,b为4
	所以 a:4 ,b:4 ,flag:flase

二、位运算符

1.基本的位运算符

位与运算:& 结论:有0,则0
位或运算:| 结论:有1,则1
位异或运算:^ 结论:相同为0,不同为1
位异或的特点:一个数据对另一个数据位异或两次,其值是它本身
反码:~ 结论:根据原码求补码,再将补码全部按位取反,0变1,1变0,后求原码
ps:对于位运算符号连接的两个具体的数据,先算出该数据的二进值数据
举例:


```java
3&4
	3的二进制: 00000000 00000000 00000000 00000011    (原码---->反码------->补码)
	4的二进制: 00000000 00000000 00000000 00000100		(原码---->反码------->补码)
	---------------------------------------------------
	&          00000000 00000000 00000000 00000000		(补码---->反码------->原码)
	结果为:0
3|4
3的二进制: 00000000 00000000 00000000 00000011    (原码---->反码------->补码)
4的二进制: 00000000 00000000 00000000 00000100    (原码---->反码------->补码)
----------------------------------------------------
|          00000000 00000000 00000000 00000111    (补码---->反码------->原码)
结果为:7
	定义两个变量 int x = -8;
				   int y = 10;
				   求 x | y
-8的二进制:  10000000	00000000	00000000	00001000 (原码)
			 11111111	11111111	11111111	11110111 (反码)
			 11111111	11111111	11111111	11111000 (补码)
10的二进制:  00000000	00000000	00000000	00001010 (原码补码一致)
--------------------------------------------------------------------------
   |         11111111	11111111	11111111	11111010 (补码)
			 11111111	11111111	11111111	11111001 (反码)
			 10000000	00000000	00000000	00000110 (原码)
			 结果为: -6
3^4
3的二进制: 00000000 00000000 00000000 00000011   (原码---->反码------->补码)
4的二进制: 00000000 00000000 00000000 00000100   (原码---->反码------->补码)
------------------------------------------------------
           00000000 00000000 00000000 00000111    (补码---->反码------->原码)
结果为:7
~-5-5进行反码
	-5的二进制: 10000000 00000000 00000000 00000101 (原码)
				11111111 11111111 11111111 11111010 (反码)
				11111111 11111111 11111111 11111011 (补码)
		----------------------------------------------------
		~       00000000 00000000 00000000 00000100 (原码、反码、补码一致)
		结果为: 4
面试题

请设计一个程序,实现两个变量数据值的交换
方式一:借助于第三变量

class Chenge{
	public static void main(String[] args){
		int a = 10 ;
		int b = 20 ;
        int temp  = a ;	
        a = b ;
		b = temp ;
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
			}
}

方式二:借助于位异或的特点

class Chenge{
	public static void main(String[] args){
		a =  a ^ b ;
		b =  a ^ b ;
		a =  a ^ b ;
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
			}
}

方式三:变量的基本赋值

class Chenge{
	public static void main(String[] args){
     	a = a + b ;
		b = a - b ;
		a = a - b ;
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
				}
		}

方式四

class Chenge{
	public static void main(String[] args){
     b = (a+b) - (a=b) ;  
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
				}
		}
2.扩展的位运算符

左移:<< 最高位丢弃,在最右边补齐0
结论:数值2的移动次幂。 如:3 << 2 ; 32^2 ,结果为12
右移:>> 如果最高位为1,则在最左边补齐1,;如果最高位为0,则在最左边补齐0
结论:数值/2的移动次幂。 如:24 >> 2 ; 24/2^2,结果为6
无条件右移:>>> 结论:无论最高位是0还是1,都在最左边补齐0

举例:
4 << 3      4*2^3 结果为32
	
	4的二进制:     00000000 00000000 00000000 00000100(原码反码补码一致)
	 左移3(000)00000 00000000 00000000 00000100000
			       00000000 00000000 00000000 00100000 (补码反码原码一致)
			   结果为 :32 
-4 << 3    

-4的二进制          10000000 00000000 00000000 00000100  (原码)
                   11111111 11111111 11111111 11111011  (反码)
                   11111111 11111111 11111111 11111100  (补码)
左移三位	     (11111111 11111111 11111111 11111100000		  
			       11111111 11111111 11111111 11100000  (补码)
			       11111111 11111111 11111111 11011111  (反码)
			       10000000 00000000 00000000 00100000  (原码)
		结果为 : -32
30 >> 3    30/2^3 结果为3

30的二进制      00000000 00000000 00000000 00011110  (原码反码补码一致)
右移300000000000 00000000 00000000 0001111000000000 00000000 00000000 00000011  (补码反码原码一致)
			结果为:3

三、三元(三目)运算符

1.格式

(表达式)?(表达式1):(表达式2)

2.执行流程

先判断表达式是true还是false, 如果是true,执行表达式1的结果,否则,执行表达式2的结果

举例:

求a、b之间的最大值

 class MaxDemo{
	public static void main(String[] args){
		int a = 40 ;
		int b = 70 ;
		int max = (a>b)? a:b;
		System.out.println("最大值为:"+max) ;
		
			}
}

求a、b、c之间的最大值
方法1:

 class MaxDemo{
	public static void main(String[] args){
		int a = 40 ;
		int b = 70 ;
		int c = 50; 
		int temp = (a>b)? a:b;
		int max = (temp>c )? temp:c;
		System.out.println("最大值为:"+max) ;
		
			}
}

方法2:

 class MaxDemo{
	public static void main(String[] args){
		int a = 40 ;
		int b = 70 ;
		int c = 50; 
		int max = ( a > b ) ?( (a > c) ? a : c  )(( b > c) ? b : c )
		System.out.println("最大值为:"+max) ;
				}
	}
		

四、键盘录入数据

1.键盘录入的使用步骤

1)创建键盘录入对象 固定格式写法:sc变量名 可以自己定义(见名知意)
Scanner sc = new Scanner(System.in) ;
2)导包,位置是在class的上面
格式:import java.util.Scanner;
3)接收键盘录入的数据
(提示:请您输入一个数据):
int 变量名 = 对象名sc.nextInt() ; //录入下一个int类型的数据
4)输出变量名

2.键盘录入的使用

1)求两个数据的最大值

import java.util.Scanner;
class MaxDemo{
	public static void main (String[] args){
	Scanner sc = new Scanner (System.in);
	System.out.println("比较两个数据的最大值");
	System.out.println("请输入第一个数据");
	int a = sc.nextInt();
	System.out.println("请输入第二个数据");
	int b = sc.nextInt();
	int max = (a > b) ? a : b ;
	System.out.print("最大值为:"+max);
		}
}

2) 求三个数值的最大值

import java.util.Scanner;
class MaxDemo{
	public static void main (String[] args){
	Scanner sc = new Scanner (System.in);
	System.out.println("比较三个数据的最大值");
	System.out.println("请输入第一个数据");
	int a = sc.nextInt();
	System.out.println("请输入第二个数据");
	int b = sc.nextInt();
	System.out.println("请输入第三个数据");
	int c = sc.nextInt();
	int max = (a > b) ? (( a > c) ? a : c) : (( b > c) ? b : c);
	System.out.print("最大值为:"+max);
		}
}

3)比较两个数值是否相同

import java.util.Scanner;
class ScannerDemo{
	public static void main(String[] args ){
	Scanner sc = new Scanner (System.in);
	System.out.println("比较两个数值是否相等");
	System.out.println("请输入第一个数据");
	int a = sc.nextInt();
	System.out.println("请输入第二个数据");
	int b = sc.nextInt();
	boolean c = a==b;
	System.out.println("结果为"+c);
		}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值