位运算

1、按位与运算(&)
      运算规则:0 & 0 = 0  ;  0 & 1 = 1   ; 1 & 0 = 0 ; 1 & 1 = 1  
       两位同为1,结果才为1,否则结果为0 。
       负数按补码形式参与按位与运算。
       用途:(1)清零    如果想将一个数清零,让这个数与上0;
                  (2)取一个二进制数的指定位     想去一个数的指定位,只需让该数与上一个数,该数的对应位置为1,其余为0;

2、按位或运算(|)
       运算规则:0 | 0 = 0 ; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1;
         只有有一个为1结果就为1。
         负数按补码形式参与按位与运算。
         用途:(1)查找一个数的某些位置为1 

3、 按位异或运算(^)
        运算规则:0 ^ 0 = 0 ; 0 ^ 1 = 1 ;1 ^ 0 = 1; 1 ^ 1 = 0
        两数相异位1,否则为0;
        用途:(1)将某数进行翻转      将某个二进制数对应位置翻转,只需该数异或一个X,X的对应位置为1,其余为0 。
                   (2)与0相异或,保留原值
题目:
        (1) 1-1000放在1001个元素中,只有一个数重复了,如何快速找出该数是多少?
            解法一:(1+2+3+...1000+x) -(1+2+3+...1000)     缺点:如果数列过大,可能会溢出     
            解法二:(1 ^ 2 ^ 3 ^....^ 1000 ^ x ) ^ (1 ^ 2 ^ 3 ^....1000) 
        (2)一系列数中,除了两个数外,其他数都只出现了两次,找出这两个数
            解法:将所有数进行异或运算,便可得到这两个数的异或结果。找出该结果最高位为1的下标,然后将数组中元素通过该位为0 和1分为两个数组中,分别将两数组中的元素进行异或便可得到两个数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值