说说&和&&的区别

1、&是位运算符,&&是逻辑运算符。
位运算符有:~,&,|,^,>>,<<,>>>
逻辑运算符:&&,||,!

/**
		 * &&和&的区别:
		 * 1:相同之处:可以当作逻辑与的运算符,两边为true,整个结果才为true;否则为false。
		 * 2.&&具有短路功能,第一个表达式为false,则不再计算第二个表达式。
		 * &:不具有短路功能,第一个表达式为fals,有表达式还会计算。
		 * 3.&:可以当按位与进行操作。
		 * 
		 */
		
			System.out.print("&&和&当逻辑与的相同和不同:");
			String s = null ;
			System.out.print(3>5&&!s.equals(""));			
			if(s!=null&!s.equals("")){
				System.out.println("这里会报空指针异常。");
			}
			System.out.println();
			System.out.println(3>5&&5<7);
			System.out.println(3>5&5<7);
			
		/**
		 * 逻辑运算符只针对boolean类型进行逻辑运算
		 * &&
		 * ||
		 * !
		 * A  B  A&&B    A||B   !A
		 * T  T   T       T     F
		 * T  F   F       T     F
		 * F  T   F       T     T
		 * F  F   F       F     T
		 */
			
			
			
		int a=10;
		int b=20;
		int c=a&b;
		System.out.println("a和b的按位与是: "+c);
		/**
		 * &:全1则为1,否则为0
		 * 	 a:0000 1010
		 *   b:0001 0100
		 * a&b:0000 0000
		 */	
		
		
		
		int d=30;
		System.out.println("30取反的值: "+~d);
		/**
		 * ~:遇0则1,遇1则0。正数直接求值,负数取反加一添负号。
		 * 
		 * d:30的二进制:  00000000  00000000 00000000 00011110
		 * ~d的二进制:d的二进制:遇0则1,遇1则0
		 * ~d:~d的二进制:11111111  11111111 11111111 11100001
		 * 求其值  负数求其值:取反加一 添负号
		 * 00000000 00000000 00000000 00011110
		 * 00000000 00000000 00000000 00011111
		 * 算:16+8+4+2+1=31 
		 * 即为-31
		 */
		int e=-31;
		System.out.println("-31取反的值:"+~e);
		System.out.println(e>>2);
		/**
		 * -31的二进制: 11111111 11111111 11111111 11100001
		 * 			  00000000 00000000 00000000 00011110
		 * 求其值  正数直接求:16+8+4+2=30
		 * 即为30
		 */
		
		
		
		int f=30;
		System.out.print("f:正数(30)右移两位: ");
		System.out.println(f>>2);
		System.out.print("f:无符号右移:正数(30)右移两位: ");
		System.out.println(f>>>2);
		int g=-30;
		System.out.print("g:负数(-30)右移两位: ");
		System.out.println(g>>2);
		System.out.print("g:无符号右移:负数(-30)右移两位: ");
		System.out.println(g>>>2);
		int h=30;
		System.out.print("h:正数(30)左移两位: ");
		System.out.println(h<<2);
		int i=-30;
		System.out.print("i:负数(-30)左移两位: ");
		System.out.println(i<<2);
		
		/**
		 * >>n:  向右移(分符号右移:正数:高位补0,低位舍去;负数:高位补1,低位舍去):数值/2的n次方 =取整(往小数取值)
		 * <<n : 向左移(不分符号左移:低位补0,高位舍去):数值*2的n次方
		 * 
		 * >>>n:无符号向右移:(分符号右移:高位永远补0):正数:数值/2的n次方 =取整
		 * 	负数变成很大的正数。
		 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值