Java位运算

位运算

运算符含义实例结果
<<左移4<<216
>>右移4>>12
>>>无符号右移4>>>12
&4&20
|4|26
^异或4^26
~取反~4-5
  1. &(与):两个二进制位只要有一个结果为0,那么结果就为0,否则结果为1。
  2. |(或):两个二进制位只要有一个结果为1,那么结果就为1,否则结果为0。
  3. ^(异或):任何相同二进制位进行 ^运算,结果是0,不相同二进制位进行运算。
  4. 运算结果是1.
  5. ~(取反):0变1,1变0.
  6. <<(左移)操作数<<位数,首先将左边的操作数转为二进制,然后按照要求左移指定位数,左边最高位丢弃,右边补齐0.

比如:

4<<2
4的二进制:00000000 00000000 00000000 00000100
左移两位:00000000 00000000 00000000 00010000
结果为:16
  1. >>(右移):首先将左边的操作数转为二进制,然后按照要求右移指定位数,最高位是0,左边补齐0,最高位是1,左边补齐1.

比如:

4>>1
4的二进制:00000000 00000000 00000000 00000100
右移一位:00000000 00000000 00000000 00000010
结果为:2
  1. ****>>>(无符号右移):首先将左边的操作数转为二进制,
    然后按照要求右移指定位数,无论最高位是0还是1,左边补齐0.

比如:

4>>>1
4的二进制:00000000 00000000 00000000 00000100
无符号右移一位:00000000 00000000 00000000 00000010 //左边补0
结果为2

注意:

  1. 左移一位及左边的数乘以2的一次方,左移两位左边的数乘以2的二次方。。。以此类推。右移一位及左边的数除以2的一次方,右移两位左边的书除以2的二次方。。。以此类推。
  2. 负数右移先计算出补码(原码取反加1),补码右移相应位数,在将补码转换成原码(补码减1再取反)。
  3. 无符号数右移,统一在最高位补0.

位运算的应用

奇偶判断
思路:让被判断的数与1相&。得数为1则为奇数,得数为0则为偶数。
例:

  • 6 & 1 = 0,即110 & 001 = 000, 6为偶数
  • 7 & 1 = 1,即111 & 001 = 001, 7为奇数

两数交换
异或特点:一个数对自己异或一次,再异或另一个数,结果为另一个数。

分析理解:

  • m=5 ,n=10
  • m的二进制:00000000 00000000 00000000 00000101
  • n的二进制:00000000 00000000 00000000 00001010
  • m ^ m = 00000000 00000000 00000000 00000000
  • m ^ m ^ n = 00000000 00000000 00000000 00001010 = n

例:

//交换m和n
int m=5;
int n=10;
System.out.println(m ^ m ^ n);//10
System.out.println(m ^ n ^ n);//5

//m = m ^ n; 
//n = m ^ n; //5
//m = m ^ n; //10
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值