- 判断奇偶数:x & 1 = 1则为奇数 / =0 则为偶数。因为奇数二进制的最后一位为1,偶数二进制最后一位为0
- 判断二进制位是1还是0
- 交换两个整数变量的值
- 求整数的绝对值
题1:
找出 [1, 1000] 唯一成对的数:
异或^, 但是我们不能直接将数字直接异或,因为不同的数异或为1,相同的数异或为0,那么重复的数异或等于0,得不到想要的结果,对于这种已知有范围的数字,我们先异或这个范围所有的数,这样不同的数相当于存在两个,而重复的数存在3个,这样异或得到的就是重复的数。(位运算满足交换律, 0 异或任何数等于本身。)
找出唯一落单的数就可以直接异或。
题二:
二进制中一的个数:
1. 不断右移 & 1 == 1 计数;
2 x & (x - 1)把低位第一个为1的位置变成0,所以当x == 0时,计算总共操作了几次。
题四:
一条语句判断一个整数是不是2的整数次方。
解:相当于判断二计制位只有一位为1。 x & (x - 1) ? == 0
题五:
将整数二进制的奇偶位互换
解:分别取奇数位和偶数位,然后偶数位左移,奇数位右移,两者再做异或运算。
题六:
给一个0-1之间的实数,如0.625,输出它的二进制表示。如0.625——>0.101
解: 0.625 2 = 1.25 取整数部分1 并去除整数部分(-1)
0.25 2== 0.5 取0
0.5 * 2 == 1 取 整体部分1去除整数部分(-1)
题7:
出现K次和出现1次的数,找出出现一次的数。
解:将所有数转化成K进制, 原因是,该题和题1的区别在于K=2,所以使用二进制的异或,因为异或相当于不进位的加法,它可以使出现了两次相同的数变成0,同理当K = 3时,我们希望出现三次的数变成0,我们使用三进制的异或。从数学角度来讲,当一个数出现K次,那么相加他一定是K的倍数,之前讲到异或相当于不进位的加法,其实也就是相加取余,再因为相加之和是K的倍数,取余等于0.