java中位与运算符_Java中的位运算符与使用技巧总结

本文详细介绍了位运算符的运算规则及其在编程中的实用技巧,包括异或运算符用于数值交换,按位与运算符进行清零和取特定位,按位或运算符设置位为1,非运算符的取反操作,以及左移、右移和无符号右移运算符在位移中的应用。这些基础知识对于理解计算机底层原理和优化代码至关重要。
摘要由CSDN通过智能技术生成

1.  (^)异或运算符

运算规则:对两个操作数进行位的异或运算。【相同取0,相反取1】。即两操作数相同时,互相抵消。

使用技巧:

(1)交换数值。 int a = 10;int b = 20   ===> a^b^a == b, a^b^b == a

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 int f = 50;2 int g = 60;3

4 f = f^g;5 g = f^g;6 f = f^g;7 System.out.println(f+" "+g);8

9 输出结果是:60 50

View Code

(2)对称抵消的传递性。如:int a = 10, int b = 20, int c = 30, int d =40. ===> a^b^c^d^a == b^c^d ,  a^b^c^d^a^b == c^d, a^b^c^d^a^b^c^d = 0.

其中可以用性质2来寻找一个成对的数组中个数为奇数的哪个值。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public static voidmain(String[] args){2

3 int array[] = {2,3,4,4,3,5,5,6,6,7,7};4

5 int a = 0;6

7 for(int i=0;i

9 v^=array[i];10

11 }12

13 System.out.println("不相同的那个数是:"+v);14

15 }

View Code

2.(&)按位与运算符

运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;   即:【两位同时为“1”,结果才为“1”,否则为0】。另:负数按补码形式参加按位与运算。

使用技巧:

(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public static voidmain(String[] args) {2 int a=50;3 int b=60;4 System.out.println(a&b&0);//输出 0;

5 }

View Code

(2)取一个数中指定位

方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。

例:设X=10101110,

取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

还可用来取X的2、4、6位。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public static voidmain(String[] args) {2 int a = 50;3 byte aBit = (byte) a;//00110010

4 byte lastTwo = (byte) 3;//00000011

5 byte lastFive = (byte) 31;//00011111

6 byte result2 = (byte)(aBit &lastTwo);7 byte result5 = (byte)(aBit &lastFive);8

9 System.out.println(Byte.toString(result2));//取50的后2位,---输出2

10 System.out.println(Byte.toString(result5));//取50的后5位,---输出18

11 }

View Code

3.( |)按位或运算符

运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;即 :参加运算的两个对象只要有一个为1,其值为1。另,负数按补码形式参加按位或运算。

使用技巧:将一个数据的某些位置为1

例如:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。

例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

4.( ~ )非运算符

运算规则:非运算即取反运算,在二进制中1变0,0变1

110101进行非运算后为001010即1010

int X进行非运算后变为   -(X+1),即~5=-6,~(-5)=4

5.(<

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

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

左移1位后a = a * 2;

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

6.(>>)右移运算符

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

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

例如:a = a >> 2 将a的二进制位右移2位,

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

7.(>>>)无符号右移运算符

>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。

例如:var temp = -14 >>> 2

变量 temp 的值为 -14 (即二进制的 11111111 11111111 11111111 11110010),向右移两位后等于 1073741820 (即二进制的00111111 11111111 11111111 11111100)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值