位运算符用于对二进制数值的位进行操作,包括移位运算符和按位运算符两种。
1.移位运算符
移位运算是将二进制数向左或向右移位。移位运算符有以下3种,如表4-6所示。
表4-6 移位运算符
移位运算符常用于直接设置二进制位,此时每一位都有其具体的含义。进行移位运算的二进制数通常有特殊的意义,并不一定表示为一个整数,因此带符号右移就失去了意义,而应当使用无符号右移符“>>>”。
【例4-6】移位运算。
程序运行结果:
运行结果分析:
2.按位运算符
按位运算符对二进制数的每一位分别进行逻辑操作,Java提供了4种按位运算符,如表4-7所示。
表4-7 按位运算符
1)“&”运算符对操作数进行按位“与”运算。当二进制数位与0相与时被置0;与1相与时数位值保持不变。
例如1010&1101,计算如下:
二进制数1010和1101按位与的结果是将右边第2位置0,其他位不变,因此“&”运算符常用于将某个数位与0相与进行清0的操作。
2)“|”运算符对操作数进行按位“或”运算。当二进制数位与1相或时被置1;与0相或时数位值保持不变。
例如计算1010|0001的结果如下。
二进制数1010和0001按位“或”操作之后,右边第1位被置1,其他位不变。因此“|”运算符常用于将某个数位与1相或进行置1的操作。(www.daowen.com)
3)“∧”运算符对操作数进行按位“异或”运算。两个操作数的对应数位的值不同时,异或的结果为1;两个操作数的对应数位的值相同时,异或的结果为0。
例如1010∧1100的结果:
与1100异或的结果是前两位数位被取反,由10变成01。后两位数位保持不变。因此“∧”运算符常用于将某些数位的值与1异或而将其值进行取反,与0异或则保持该数位的值不变。
如果将1010∧1100的结果0110再次和1100异或,则可以得到原来的值1010。可以使用异或的方法,对一些数字进行简单的加密和解密操作。解密的操作为:
4)“~”是按位运算符中唯一的一元运算符,它的作用是将二进制数的每一位取补,也就是将1取补为0,将0取补为1。例如:
按位运算符所运算的数值虽然是整型数,但一般不作为数值计算来使用,而多是用来对逻辑标志进行设置,比如对某个二进制位进行置0、置1或取反。通过按位运算符可以方便地设置、修改、访问每个二进制标志位的状态。
下面是使用位运算符的几个操作技巧。
假设变量x为int整型数。
1)将x的二进制值保留最低6位:x&0x003f。
2)将x的二进制值最低5位清0:x&~0x001f。
3)将x的二进制值最低4位置1:x|0x000f。
4)将x的二进制值最低3位取反:x∧0x0007。
5)取出x的二进制值最右边一个1的位值:((x-1)∧x)&x。
6)当x&1==0时,x为偶数;当x&1==1时,x为奇数。
7)取出x第k位的值:x>>k&1。
8)将x的第k位清0:x&~(1<<k)。
9)将x的第k位置1:x|(1<<k)。
10)将x循环左移k次:x<<k|x>>32-k(32,int类型为32位二进制数)。
11)将x的最低的n个数位置为1,其余数位置为0:x=~(~0<<n)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。