「Leetcode-算法_Easy461」通过「简单」题目学习位运算

Easy 461.汉明距离

因为原题目翻译效果不佳,这里是笔者自己的理解。

输入两个二进制数 x、y,

输出将 y 变为 x 所需改变的二进制位数,成为汉明距离。

注意:
0 ≤ x, y < 2e31.

示例:

输入: x = 1, y = 4

输出: 2

解释:

1   (0 0 0 1)
4   (0 1 0 0)
        ↑  ↑

补充位运算

符号 描述 运算规则
& 两个位都为 1 时,结果才为 1
| 两个位都为 0 时,结果才为 0
^ 异或 两个位相同为 0,相异为 1
~ 取反 0 变 1,1 变 0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补 0
>> 右移 各二进位全部右移若干位,对无符号数,高位补 0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补 0(逻辑右移)

Java右移

/**
* Java使用 >>	   表示算术右移 补符号位
*					>>> 	表示逻辑右移 补0
*/
  • 推导:

    • 使用异或运算的性质 “相同为0 不同为1”
    • 统计异或运算后的数有多少位 1
  • 代码

    class Solution {
        public int hammingDistance(int x, int y) {
            int result = 0 ;
            int XOR = x ^ y;
            while (XOR != 0) {
                result += XOR & 1;
                XOR >>>= 1;
            }
            return result;
        }
    }
    
上一篇:2017年西安区域赛 Sum of xor sum(线段树)


下一篇:【2021杭电多校第一场】1005 Xor Sum