《算法零基础100讲》(第46讲) 位运算 (异或) 入门
2021/12/6 12:16:42
本文主要是介绍《算法零基础100讲》(第46讲) 位运算 (异或) 入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 写在前面
- 异或
- 简单应用
- 课后习题
- 136. 只出现一次的数字
- 190. 颠倒二进制位
- 461. 汉明距离
写在前面
异或
先来一个异或的真值表
x | y | x^y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
从上面这张表,我们其实可以挖掘出不少性质。
- 相同两个数的异或值一定是0
- 任何数和0异或值一定是0
- 异或值可以用来找两个数字的二进制位中不相同的位
简单应用
异或最经典的应用就是用于交换两个变量的值。其实也是利用了相同两个数异或和等于0的性质。代码如下:
a=a^b; b=a^b; a=a^b;
课后习题
136. 只出现一次的数字
直接利用两个数异或和为0的性质
class Solution { public: int singleNumber(vector<int>& nums) { int sum=0; for(auto t:nums) sum^=t; return sum; } };
190. 颠倒二进制位
一个数从后往前看二进制位是多少,一个数一直往前推一位并把这一位加上
class Solution { public: uint32_t reverseBits(uint32_t n) { uint32_t ans=0; for(int i=0;i<32;i++) { ans=(ans<<1)|(n&1); n>>=1; } return ans; } };
461. 汉明距离
两个数异或和中1的个数即二进制位中不同的数目
class Solution { public: int lowbit(int x) { return x&-x; } int hammingDistance(int x, int y) { int t=x^y,cnt=0; while(t) { t^=lowbit(t); cnt++; } return cnt; } };
这篇关于《算法零基础100讲》(第46讲) 位运算 (异或) 入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行