Java位运算小知识总结

运算符优先级

~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|

>>运算符

>>是有符号位右移,简单来说就是看二进制高位的第一位是0还是1,用它来补足右移过程中缺失的高位。

代码:

int n = -0xf0;

System.out.println("number:"+n);

System.out.println("binary:"+Integer.toBinaryString(n));

System.out.println("length:"+Integer.toBinaryString(n).length());

n = n>>2;

System.out.println("number:"+n);

System.out.println("binary:"+Integer.toBinaryString(n));

System.out.println("length:"+Integer.toBinaryString(n).length());

结果:

number:-240

binary:11111111111111111111111100010000 1

length:32

number:-60

binary:11111111111111111111111111000100 2

length:32

分析:

可以很明显的比较出结果 1 和 2的差别

>>>运算符

>>>是无符号位右移,高位统一用0补足

代码:

int n = -0xf0;

System.out.println("number:"+n);

System.out.println("binary:"+Integer.toBinaryString(n));

System.out.println("length:"+Integer.toBinaryString(n).length());

n = n>>>2;

System.out.println("number:"+n);

System.out.println("binary:"+Integer.toBinaryString(n));

System.out.println("length:"+Integer.toBinaryString(n).length());

结果:

number:-240

binary:11111111111111111111111100010000 1

length:32

number:1073741764

binary:00111111111111111111111111000100 2

length:30

分析:

你可以看到结果2中高位补足了两位00,只是在转换成二进制字符串时首位0不显示而已。

<<运算符

<< 是左移,低位用0补足

代码:

int n = 0xf0;

System.out.println("number:"+n);

System.out.println("binary:"+Integer.toBinaryString(n));

System.out.println("length:"+Integer.toBinaryString(n).length());

n = n<<2;

System.out.println("number:"+n);

System.out.println("binary:"+Integer.toBinaryString(n));

System.out.println("length:"+Integer.toBinaryString(n).length());

结果:

number:240

binary:11110000 1

length:8

number:960

binary:1111000000 2

length:10

分析:仔细观察可以发现结果2的低位补足两位0

^运算符

^ 是异或运算符

运算规程:

0^0=0

1^0=1

0^1=1

1^1=0

l按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。

l 通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。

例如交换两个整数a,b的值,可通过下列语句实现:

a=10100001, b=00000110

a=a^b; //a=10100111

b=b^a; //b=10100001

a=a^b; //a=00000110

l 异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值