很多时候使用位运算可以简化一些问题的求解。包括&与运算;|或运算;^异或运算;<<左移;>>右移运算。
(1)2进制表示元素的组合
算法思路:假设有3个元素,则可以用二进制表说0-8,某一位为1则表明选取了该元素。
(2)二进制中的1的个数
算法思路:
方法1:最右位于1做与运算,结果为1则加1,直接右移。但如果是负数的话,右移会变成全1,陷入死循环。同时右移与除2是等价的,但是位运算比除法效率高很多。
方法2:为避免死循环,我们可以最右位与1做与运算,然后1左移1位,再做与运算。
方法3:把一个整数减去1,再和原来的数做与运算。会把该整数最右边全部变为0,一个整数二进制中有多少个1,就可以做多少次这种操作。
(3)判断一个整数是不是2的整数次方
算法思路:2的整数次方的数的二进制只有1位是1,其他位是0,减1后,最高位为0,其他位为1,做与运算,结果为0;
(4)输入两个数m,n,m的二进制表示需要改多少个才能成为n
算法思路:两个数异或,计算异或中结果中的1的个数。
网友评论