「位运算」简单了解,语言:Java

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;
        }
    }
    

版权声明:本文为evlic原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/evlic/p/15119292.html