java 位运算

47 阅读1分钟

位运算平时用的少? 有可能是你 不知道一些基本的东西

& | ^ ~ << >>

& 与运算符 二进制都为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  => 001101 -> 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…

最后本人水平有限 文章难免出现错误 敬请指出 希望我们一同成长