C/C++教程

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

本文主要是介绍「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;
        }
    }
    
这篇关于「Leetcode-算法_Easy461」通过「简单」题目学习位运算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!