位运算相关题目的练习与分析
位运算是一种直接对二进制位进行操作的运算,通常在算法优化和底层编程中广泛使用。以下是一些常见的位运算题目及其分析,帮助你更好地理解和练习位运算。
常见位运算符
- 按位与 (AND)
&
: 对应位都为1时,结果为1。 - 按位或 (OR)
|
: 对应位中有一个为1时,结果为1。 - 按位异或 (XOR)
^
: 对应位不同则结果为1,相同则为0。 - 按位取反 (NOT)
~
: 每个位取反。 - 左移 (Left Shift)
<<
: 各二进制位全部左移若干位,高位丢弃,低位补0。 - 右移 (Right Shift)
>>
: 各二进制位全部右移若干位,对无符号数,高位补0;对有符号数,高位补符号位。
题目练习
判断数字是否是2的幂次
- 题目:给定一个整数,判断它是否是2的幂次。
- 思路:一个数是2的幂当且仅当它的二进制表示中只有一位是1。
(n > 0) && (n & (n - 1)) == 0
。
统计二进制中1的个数
- 题目:计算一个整数的二进制表示中1的个数。
- 思路:对
n
不断进行n & (n - 1)
运算,统计次数。
不使用临时变量交换两个数
- 题目:不借助临时变量交换两个整数。
- 思路:使用异或:
a = a ^ b b = a ^ b a = a ^ b
找出出现一次的数字
- 题目:一个数组中,其他数字都出现了两次,只有一个数字出现了一次,找出这个数字。
- 思路:通过异或运算,将所有数字异或,最终结果就是出现一次的数字。
整数的二进制表示中的最低位1
- 题目:找出一个整数的二进制表示中最低位的1。
- 思路:
n & (-n)
可以提取出最低位的1。
总结
位运算因为其直接作用于二进制,所以在很多算法中可以用以优化性能。通过练习和理解上述经典问题,你可以更好地掌握位运算在编程中的应用。记得实践中,经常考虑整型溢出和异常输入的处理。