Java中的基本运算符(2)

接着前面继续写。这次主要说明一下位运算符。

1. 与或非

在整型计算时,可以采用位运算,最典型的位运算是与(AND)、或(OR)、非(NOT),所有的操作都是按位进行。Java中与之对应的三个运算符分别是&,|,以及~。

例如,通过逻辑与提取某几个位,或者给某1个或及个位置1清0等。逻辑非运算是单目运算,用于取反,即将0变为1,将1变为0(也可以叫做toggle,翻转)。

int a=0b10100101;
System.out.println(Integer.toBinaryString(a & 0x07));//101
System.out.println(Integer.toBinaryString(a | 0x07));//10100111
System.out.println(Integer.toBinaryString(~a));//11111111111111111111111101011010

2. 异或

异或使用运算符^,同样按位操作,参与运算的两个bit位相同,则结果为0,如果不同,则结果为1。

当然,这些个位运算的操作,和C语言中没有太大的区别,这里就不再展开论述了。

3. 移位运算

首先,移位运算>>和<<和C语言中类似,其中,左移位运算(<<)很简单,在低位补0,x<<n的效果是x与2的n次幂相乘,但是右移位运算法(>>)会在高位补充符号位,因此,负数会在前面补充1,而正数在前面补充0。

Java还扩展了一个用0填充高位的运算符>>>,无论原来的数是正数还是负数,都会在高位补充0。测试代码如下:

System.out.println(Integer.toBinaryString(a));//11111111111111111111111111001110
System.out.println(Integer.toBinaryString(a <<1));//11111111111111111111111110011100
System.out.println(Integer.toBinaryString(a >>1));//11111111111111111111111111100111
System.out.println(Integer.toBinaryString(a>>>1));//1111111111111111111111111100111
System.out.println(a>>>1);//2147483623

可以看到,最后一个由于在最高位补了0,导致从一个很小的负数,变成了一个非常大的正数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值