认识异或运算的本质与基本规律,0^x=x,x异或x=0,有交换律,结合律,与顺序无关

认识异或运算的本质与基本规律,0^x=x,x异或x=0,有交换律,结合律,与顺序无关

提示:异或运算系列文章
非常重要的算法技巧:异或运算!!

为了破解以下这些重要的题目:
(2)数组arr中,有一个数k出现了奇数次,其他数出现偶数次,请找到并打印这个数k
(3)如何把一个数字x最右侧那个1拿出来,变成00…10…的格式
(4)如何统计一个数字x中1的个数


异或运算本质是啥?

不带进位的加法!
先来看二进制异或:就是k=2进制的不带进位加法。

我们有一个异或的口诀:同为0,不同为1
比如11^3=8
即1011^0011=1000
两位碰,同为0,不同为1
在这里插入图片描述
那么异或的本质是啥呢?
不带进位的加法!!!

还是上面这例子:
在这里插入图片描述

扩展任意k>=2进制的异或:k进制不带进位的加法

【未来,我们会——在高频面试题那,碰到很有代表性的大厂高频题:用k进制异或解决!】
(1)比如说吧,k=4,4进制异或是啥意思呢?一样啊
就是4进制数,它不需要带进位,做加法即可,没啥区别
比如,12332 ^ 21332=33221
【在这你要迅速转换脑子,4进制,0123,代表4进制的取值】
4进制不进位加法就是:4进制异或
2+2=4(10进制的)=10(4进制的),1是进位,不要
3+3=6(10进制的)=12(4进制的),1是进位,不要
2+1=3,就是4进制的3
1+2=3,就是4进制的3
在这里插入图片描述

(2)再来一个简单点的,k=3,那取值为012,故整个数x中,最多取2,
比如:2+1=10(10不是十进制的10哦,而是3进制的3,就像二进制10一样,是2进制的2)=3
好请你求3进制异或:
1210^1222=2132
其中:2+0=0
1+2=10,1进位不要
2+2=11,前面那个1进位不要
1+1=2
最后就得到不带进位的加法:3进制异或
在这里插入图片描述

现在你明白了2进制的异或了吧,甭管k=23456……
k进制异或就是k进制的不带进位的加法,随意!!!


k进制异或运算的基本规律

不管是k=23456……
异或运算都有一个基本规律:记住了
(1)x^0=x;x异或0就是x本身
(2)x^x=0;x异或x本身是0
(3)异或运算有交换律,结合律,与顺序无关!

怎么理解?
(1)x^0=x;x异或0就是x本身
知道了异或的本质是k进制不带进位加法之后,那就好说了
比如:x=7
7^0=7
在这里插入图片描述

(2)x^x=0;x异或x本身是0
在这里插入图片描述

(3)异或运算有交换律,结合律,与顺序无关!
7异或0异或7
在这里插入图片描述

7异或7异或0
在这里插入图片描述
谁跟谁先结合,不影响整体异或结果,只与各个位的数字有关

所以呢?
偶数个x异或=0
奇数个x异或=x
为啥呢?
用上面3条规律:
在这里插入图片描述在这里插入图片描述
所以这个关于异或的基础知识,一定要掌握,今后在算法题中有很多用处的!
代码自己验证一下就知道:

//学一些基础的知识
    public static void baseKnowledge(){
        //两个数字的异或a^b是每一个加法都不进位的相加
        //N^0==N,N^N=0;因为不进位加,任何数字与N异或完都是自己,自己异或自己=0,
        int N = 7;
        System.out.println(N ^ 0);
        System.out.println(N ^ N);
        System.out.println(N^N^N);//奇数次自己异或自己,还是自己!!
        System.out.println(N^N^N^N);//偶数次异或自己,为0,因为上面那两条铁律!!
    }

总结

提示:重要经验:

1)异或运算的本质就是k进制不带进位加法!
2)异或有3条规律,x异或0=x,x异或x=0,异或不考虑顺序

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值