异或以及一些小技巧

异或以及一些小技巧

  1. N = N ^ 0 0 = N ^ N

  2. N >> 2 = N / 2 N << 2 = N * 2

  3. 说明>>与>>>的区别

    '>> 不带符号位右移,即该数若为正数,则高位补0,若该数为负数,则高位补1

    ‘>>> 带符号位右移,即不管该数为正数还是负数,高位都不0

    1000 >> 1 = 1100

    0100 >> 1 = 0010

    1000 >>> 1 = 0100

    0100 >>> 1 = 0010

  4. 将某一个数 乘2加1: N = N * 2 + 1 相当于 N = N << 1 & 1

  5. 异或操作满足结合律与交换律:

    ​ a ^ b = b ^ a

    ​ a ^ b ^ c = a ^ (b ^ c)

    总之若干个数进行异或操作,其结果与异或的顺序无关。

  6. 取某个数二进制表示,最右边为1的位置上为1,其余位置都补0表示的数:
    x = (~N + 1) & N

    例: N=11000110, 结果 00000010

    ​ ~N = 00111001

    ​ ~N+1=00111010

    (~N + 1) & N = 00000010

应用:

  1. 已知一个数组,其中有一个数是奇数个,其余的数全是偶数个,求奇数个的数?
   public static void main(String[] args) {
   
        int[] arr =</
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值