位运算平时用的少? 有可能是你 不知道一些基本的东西
& | ^ ~ << >>
& 与运算符 二进制都为1才为1 1 & 5 == 001 & 101 =》 001。
| 或运算符 二进制有1就为1 1 | 2 == 01 | 10 =》 11。
^ 异或运算符 二进制相同则为0 不一样就为1 1 ^ 2 == 01 ^ 10 => 11 。
~ 非运算符 取反运算 二进制为1则转0 为0则转1
<< 左移
二进制左移两位 右边补零 相当于×4(在一般条件下 即符号位没有溢出)
eg 5 (101)<<2 10100
右移 二进制右移两位 左边补零 相当于 ÷4(在一般条件下 即符号位没有溢出) eg 5 (101 ) >> 2 001
位运算常用
1 奇偶判断 n & 1 == 1 奇数
2 (?/ 2^n == ? >> 2 ^ n) (? * 2^n == ? << 2^n) 左移比单纯除速度要快 理论上
3 n & (n-1) 可以减少 n 的二进制表达中 1的个数
eg 5 == 101 5 & 4 => 001 (101 -> 001 二进制1少了一个)
4 n ^ n = 0 这有什么用 别急 下面再告诉你
5 实现数值交换 int a = 6,b=5;a = a^b;b = a^b;a = a^b; // a= 5 b = 6;
算法小练习
1 汉明距离.
指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x 和 y,计算并返回它们之间的汉明距离。
2 数组中只出现一次的数.
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,
其余每个元素均出现两次。找出那个只出现了一次的元素。
3 数字中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),
返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。
详解很快就会更新
图片是赤仓大大的 pixiv 882569
图片如果侵权联系道歉删除
相关链接 www.bilibili.com/video/BV1nP…
最后本人水平有限 文章难免出现错误 敬请指出 希望我们一同成长