与二进制中1的位数有关题目

来源:互联网 发布:中国流行音乐发展知乎 编辑:程序博客网 时间:2024/06/06 17:11

判断一个整数是否为2的整数次方

题目:用一条语句判断一个整数是不是2的整数次方。
解题思路:一个整数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其它所有位都是0。可以将这个整数减去1之后再和它自己做与运算,如果结果为0,表示该整数只有一位1,是2的整数次方;如果结果不为0,表示该整数不是2的整数次方。

    function expOf2($num){        //返回1,表示$num是2的整数次方        return $num&($num-1) ? 0 : 1;    }

输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n

题目:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。比如10的二进制表示为1010,13的二进制表示为1101,需要改变1010中的3位才能得到1101。
解题思路:我们可以分为两步解决这个问题:第一步求这两个数的异或,可以将两个数不同进制位改为1;第二步统计异或结果中1的位数。

    function mToN($m , $n){        $result = $m ^ $n;//得到异或结果        return numberOf1($result);//参考二进制中1的个数中函数    }
0 0
原创粉丝点击