异或妙用

1)在1到n的数字中,有且仅有m这个数字重复出现了,其他数字有且仅出现一次,找到这个m。

答案:可以考虑异或运算。

           原始数据:1,2,...,m,m,....n

           比较数据:1,2,3,...,n

          a=原始数据的异或  即 1^2^....^n^m

          b=比较数据的异或  即 1^2^...^n

          x=a^b=(1^2^...^n)^(1^2^...^n)^m=0^m=m 

2) 交换的另一种方式

     x与y交换,正常是通过一个中间量保存.

     可以直接: x=x^y,

                      y=x^y,   x^y^y=x^0=x

                      x=x^y,    x^y^x=y^0=y

       这样无需中间量即可完成交换.

3)反码

   i-j=i+(-j)=i+2^n+(-j)=i+(2^n-i-j)+1=i+j的反码+1=i+j的补码

  如果x为符号位是1的补码,则x的绝对值是出去符号位的部分取反,再加1.

  比如 反码为:10100010  此数是负数,绝对值为除去符号位的部分0100010 取反,即1011101,再加1 为 1011110 数值是94,所以此补码表示的是-94.

 当然针对符号位为负的补码,也可以对补码减1再对除符号为取反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值