运算符

Java中位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”

1、 与运算符,也叫位与运算符

与运算符用符号“&”表示,其使用规律如下:

两个操作数中位都为1,结果才为1,否则结果为0。

比如 有两个整数int a = 128, int b = 129, 则 a & b = 128;

分析这个程序:

“a”的值是128,转换成二进制就是10000000,

“b”的值是129,转换成二进制就是10000001。

根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

2、 或运算符,也叫位或运算符

或运算符用符号“|”表示,其使用规律如下:

两个位只要有一个为1,那么结果就是1,否则就为0。

比如 有两个整数int a = 128, int b = 129, 则 a | b = 129;

分析这个程序:

“a”的值是128,转换成二进制就是10000000,

“b”的值是129,转换成二进制就是10000001。

根据与运算符的运算规律,只要有一个为1,那么结果就是1,可以知道结果就是10000001,即129。

3、 非运算符

非运算符用符号“~”表示,其运算规律如下:

如果位为0,结果是1,如果位为1,结果是0

4、 异或运算符

异或运算符是用符号“^”表示的,其运算规律是:

两个操作数的位中,相同则结果为0,不同则结果为1。

比如 有两个整数int a = 15, int b = 2, 则 a ^ b = 13;

分析上面的程序段:

a 的值是15,转换成二进制为1111,

b 的值是2,转换成二进制为0010,

根据异或的运算规律,可以得出其结果为1101 即13。

5、 Java中&、|、&&、||区别

<1> & 和 |既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean表达式。

    当&和|两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算。

    而短路与和或(&&和||)的两侧要求必须是布尔表达式。
	
<2> 对于&:无论&左边是否为false,他都会继续检验右边的boolean值。

    对于&&:只要检测到左边Boolean值为false时,就会直接判断结果,不会在检验右边的值。
	
	比如:
	
	    int i = 0;
	
	    if(3>4 && (++i)>0){
		   System.out.println("成立时i的值" + i);
		}else{
		   System.out.println("不成立时i的值" + i);
		} 
		
		结果为:不成立时i的值0
		
		if(3>4 & (++i)>0){
		   System.out.println("成立时i的值" + i);
		}else{
		   System.out.println("不成立时i的值" + i);
		} 
		
		结果为:不成立时i的值1
		
		分析:
		
		当使用&&时先判断左边的表达式发现3>4为false,就不会再检验右边的结果直接执行else中的语句
		
		当使用&时先判断左边的表达式发现3>4为false,依然会去执行右边的表达式先++i得到i=1,i>0为true,但于的运算规则是有一个为false即为false,则执行else中的语句。
	
    对于|:无论左边是否为ture,都会检验右边

    对于||:只要检测到左边Boolean值为true时,就会直接判断结果,不会在检验右边的值。
	
	比如:
	
	    int j = 0;

        if(3>2 || (++j)>1){
            System.out.println("成立时j的值" + j);
        }else{
            System.out.println("不成立时j的值" + j);
        } 
		
		结果为:成立时j的值0
		
		if(3>2 | (++j)>1){
		   System.out.println("成立时j的值" + j);
		}else{
		   System.out.println("不成立时j的值" + j);
		} 
		
		结果为:成立时j的值1
		
		分析:
		
		当使用||时先判断左边的表达式发现3>2为true,就不会再检验右边的结果直接执行true中的语句
		
		当使用|时先判断左边的表达式发现3>2为true,依然会去执行右边的表达式先++j得到j=1,j>1为false,但或的运算规则是有一个为true即为true,则执行true中的语句。		

6、 左移运算符(<<)

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

a = a << 2 将a的二进制位左移2位,右补0,

左移1位后a = a * 2; 

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。即 a << m 则 a = a * 2的m次方

比如 int a = 2; a = a << 2 则 a = 8

分析如下:

2转为二进制 0000 0000 0000 0000 0000 0000 00000 0010

左移2位     0000 0000 0000 0000 0000 0000 00000 1000

7、 右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

操作数每右移一位,相当于该数除以2。

b = b >> 2 将b的二进制位右移2位,

左补0 or 补1 得看被移数是正还是负。

右移一位相当于除2,右移n位相当于除以2的n次方。即 b << n 则 b = b / 2的n次方

比如 int b = 11; b = b >> 2 则 b = 2

分析如下:

11转为二进制 0000 0000 0000 0000 0000 0000 00000 1011

右移2位      0000 0000 0000 0000 0000 0000 00000 0010

8、 无符号右移运算符(>>>)

忽略了符号位扩展,0补最高位  无符号右移运算符>>> 只是对32位和64位的值有意义

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零

9、 复合赋值运算符

位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:

&=    例:a &= b        相当于a=a & b

|=    例:a |= b        相当于a=a | b

>>=   例:a >>= b       相当于a=a >> b

<<= 例:a <<= b       相当于a=a << b

^=   例:a ^= b       相当于a=a ^ b

运算规则:和前面讲的复合赋值运算符的运算规则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值