六种运算符

一.算术运算符

1.基本算术运算符:

                        +, -, *, /, %

2.扩展的算术运算符:

                        ++或者--

        情况1:单独使用:

                    ++或者--在数据的前面
                    ++或者--在数据的后面

        无论在数据的前面还是后面,都是对当前变量的值进行自增1或者自减1

        情况2:参与运算使用:

                    ++或者--在数据的前面:先进行自增1或者自减1,然后参与运算
                    ++或者--在数据的后面:先进行运算,然后再自增1或者自减1

二.赋值运算符

1.基本赋值运算符:

                        =

2.扩展的赋值运算符:

                        +=, -=, *=, /=, %=

eg:

/*编译出错*/


class OperatorTest{
	
	public static void main(String[] args){
		
		short  s  = 1 ;
		s = s + 1 ;//从int转换到short可能会有损失

		//Java默认类型提升(隐式类型转换)当byte,short,char三者不转换,一旦参与运算,优先提升int

		//= 右边是int类型的结果,=左边short接收,无法接收大类型必须强转类型转换
		
		
		System.out.println("s:"+s) ;
	
	}
}
/*编译正确*/

class OperatorTest{
	
	public static void main(String[] args){
		
		short  s  = 1 ;
		
		s += 1 ;  
        //s是short类型,扩展的赋值运算符在这种场景下,隐藏了强制类型转换
		//等价于 s =  (short)(s+1);
		System.out.println("s:"+s) ;
	}
}

三.关系运算符

关系运算符:<, >=, >, >=, ==, !=

        这些符号连接的表达式无论简单的还是复杂的,最终的结果肯定boolean类型,要么true,要么false!

四.逻辑运算符

基本的逻辑运算符:
            逻辑单与&
                    特点: 并列关系(交集),有false,则false
            逻辑单或|:
                    特点: 或的关系(并集),有true,则true
            逻辑异或^:
                    特点: 相同则为false,不同则为true
            逻辑非!:
                    特点:非true,则false;非false,则true; 偶数个非是它本身

扩展的逻辑运算符
            逻辑双与-----&&
            逻辑双或-----||


     逻辑双与&&和逻辑单与&的区别?
                    
            共同点:都表示并列关系,有false,则false!(有一个条件不成立,则不成立)
            不同点: 
                逻辑双与&&连接的表达式如果左边位false,则右边不执行了,它具有短路效果!
                实际开发中,针对逻辑判断,并列条件都使用&&,效率要比单与&要高,左边为false,整个结果就是false!
                逻辑单与&:执行效率低,左边位false,右边还要执行!
      
        逻辑双或||: 连接的表达式如果左边为true,则右边不执行,具有短路效果,有true,则true!


      

class OperatorDemo2{
    public static void main(String[] args){
        
        int x=3;
        int y=4;
        System.out.println((++x)==3&&(--y)==3);
        System.out.println("x:"+x+"y:"+y);


}

}

     

五.位运算符

位运算符: 使用变量或者数据值本身进行计算的!
            基本的符号:
                位与&:  有0则0
                位或|:   有1则1
                位异或^:  相同则为0,不同则为1
                反码~:   在数据的补码基础上,全部按位取反0变1,1变0

class OperatorDemo{
	
	public static void main(String[] args){
		
		System.out.println(3 & 4) ;//3位与4
		System.out.println(3 | 4) ;//3位或4
		System.out.println(3 ^ 4) ;//3位异或4
		System.out.println(~3) ;//反码3
	}
}
/*

	位与&:有0则0
		
	将这个数据默认int	
	3和4的二进制数据---原码 ,反码,补码相同
	00000000 00000000 00000000 00000011    
	位与&
	00000000 00000000 00000000 00000100
	-------------------------------------------
	00000000 00000000 00000000 00000000
		
	结果:0
	
	
	位或|: 有1则1
	
	3和4的二进制数据---原码 ,反码,补码相同
	00000000 00000000 00000000 00000011    
	位或|
	00000000 00000000 00000000 00000100
	------------------------------------
	00000000 00000000 00000000 00000111  ---补码---反码---原码
	
	结果:7
	
	
	位异或:^ :相同则为0,不同则为1

	
	3和4的二进制数据---原码 ,反码,补码相同
	00000000 00000000 00000000 00000011    
	位异或^
	00000000 00000000 00000000 00000100
	------------------------------------
	00000000 00000000 00000000 00000111
	
	结果:7
	
	
	
	反码~:
		~数据:不分最高符号位,所有的数据按位取反,0变1,1变0
	
	00000000 00000000 00000000 00000011 ---原码---反码---补码
	
	补码:
	00000000 00000000 00000000 00000011
	
	11111111 11111111 11111111 11111100  ----补码操作
	
	
	有符号位的数据表示法
	
	最高符号位		数值位      补码
		1			1111111 11111111 11111111 11111100
		-											 1
		------------------------------------------------
		1			1111111 11111111 11111111 11111011  反码
		-------------------------------------------------
		1		    0000000 00000000 00000000 00000100
		
=		-						4
	
*/

位异或的最大特点:
                一个数据被另一个数据位异或两次,其值是它本身!

移位符号:

        <<, >>, >>>

        左移:<<

                将<<符号左边的数据向左移动多少位,右边不够的补0,最高位丢弃掉

                        特点:

                                将<<符号左边的数据乘以2的移动次幂

                                eg:        3<<2        =3*2^2

        右移:>>

                将>>符号左边的数据向右移动多少位,最高位是0,右移后,空缺位补0;最高位是1,最高位补1

                        特点:

                                使用>>左边数据除以2的移动次幂

                                eg:

                                                24>>3       =24/2^3

        无符号右移:>>>

                将>>>符号左边的数据进行向右移动,无论最高位是1还是0,都是补0

          

class OperatorDemo3{
	
	public static void main(String[] args){
		
		
		//<<
		System.out.println(3<<2) ;//3左移2位
		
		//>>
		System.out.println(24>>2) ;//24右移动2位
		
		
		//>>
		System.out.println(-24>>2) ;
		
		//>>>:无符号右移
		System.out.println(-24>>>2) ;
	}
}
/*
	3<<2:左移2位
	
	将3-----原码,反码,补码相同
			00000000 00000000 00000000 00000011
		(00)000000 00000000 00000000 0000001100----> 补码 000000 00000000 00000000 0000001100
		
		--反码---原码:相同00000000 00000000 00000000 00001100
		
		=12
		
		
		
		
	24>>2	24右移动2位
	
	24的原码,反码,补码相同
	00000000 00000000 00000000 00011000
	  0000000000 00000000 00000000 000110  (00)
	    00000000  00000000 00000000 00000110  补码----反码---原码 :相同
		
		
		=6
		
		
		
	-24>>2 :负的24右移2位
	
	1         0000000 00000000 00000000 00011000    			-24  原码
	
	
	反码:最高符号位不变,数值位按位取反
	1         1111111 11111111 11111111 11100111         -24  反码
	+									       1
	------------------------------------------------
	1         1111111 11111111 11111111 11101000		-24的补码  移动向右移动2位
	
	  111         1111111 11111111 11111111 111010(00)
	  
	  
	  11111111 11111111 11111111 11111010 补码
	  -								    1
	  ---------------------------------------
	  11111111 11111111 11111111 11111001 反码
	  10000000 00000000 00000000 00000110  原码
	  
	  -   6
	  
	  
	  
	  
	  
	  -24>>>2  无符号右移
	  1         0000000 00000000 00000000 00011000    			-24  原码
	  反码:最高符号位不变,数值位按位取反
	1         1111111 11111111 11111111 11100111         -24  反码
	+									       1
	------------------------------------------------
	1         1111111 11111111 11111111 11101000		-24的补码  >>>2 
	
	  001         1111111 11111111 11111111 111010(00)
	  
	  001         1111111 11111111 11111111 111010  ---补码---反码---原码
	  
	  1,073,741,818
	*/

  六.三元运算符 

格式:

        (表达式)?执行TRUE的结果:执行FALSE的结果;

注意:

        没有提示类型都是默认int

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值