笔试题1. LeetCode OJ (1) Hamming Distance

这里写图片描述

题目意思是:求两个整数之间的汉明距离是对应位不同的位置的个数。

class Solution {
public:
    int hammingDistance(int x, int y) {
        if(x==y) return 0;
        int count=0;
        while(x || y){//排除x,y都是0的情况
            if((x&1)!=(y&1)) count++;
            x=x>>1;
            y=y>>1;
        }
        return count;
    }
};

x&1什么意思:

从命令的角度讲,是将x的每一bit(2进制中的1和0都占一个bit)与0001的每一bit做与运算.
“&”是”与运算”的意思,1&1=1,其他情况(1&0,0&1,0&0)都=0.
从逻辑的角度来讲,这个命令就是取x的最左边一位.例如x是0011,x&1得到0001,如果x是0110,x&1得到0000.

x=x>>1;

c语言程序中x>>=1,如果作用于整数x,就是把x右移一位,把x的二进制值的最后一位丢弃,最高位补0。
实际就是把x的值除以2。在运算结果上等价于x=x/2。

以上是我的理解,有什么问题还请大家多多指正。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值