关于二进制相关的问题,以下是常见题型及解题思路的总结,结合了理论知识和实际应用场景:
一、基础运算类
二进制加法与减法
- 加法规则:0+0=0,0+1=1,1+0=1,1+1=10(逢二进一)
- 减法规则:0-0=0,1-0=1,1-1=0,0-1=1(模二加法)
- 示例:1010 + 1011 = 10101(二进制加法)
二进制乘法与除法
- 乘法:0×0=0,1×0=0,1×1=1
- 除法:0÷1=0,1÷1=1,0÷0无意义
- 示例:1101 × 1010 = 1111110(二进制乘法)
逻辑运算
- 与运算:0 & 0=0,0 & 1=0,1 & 1=1
- 或运算:0 | 0=0,0 | 1=1,1 | 1=1
- 非运算:~0=1,~1=0
二、进制转换类
二进制转十进制
- 方法:按权展开,例如110001₂ = 1×2⁵ + 1×2⁴ + 0×2³ + 0×2² + 0×2¹ + 1×2⁰ = 49₁₀
- 示例:1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 13₁₀
十进制转二进制
- 方法:除2取余,逆序排列,例如16₂ = 10000₂
- 示例:23₁₀ = 10111₂
三、应用类
二进制位数计算
- 规律:n位二进制数可表示2ⁿ个状态(如3位开关有2³=8种状态)
- 示例:8位二进制数可表示2⁸=256种状态
二进制与八进制转换
- 每3位二进制对应1位八进制(如010B=2O)
- 示例:110110B = 62O
四、算法类(如LeetCode第15题)
题目:二进制求和
输入:两个二进制字符串a和b
输出:它们的和(二进制表示)
解法:逐位相加,处理进位(类似十进制加法)
示例:a="1010", b="1011" → 结果为"10101"
五、位运算类
颠倒二进制位
- 方法一:逐位遍历,使用掩码和位移操作(如 `reversed |= (n & 1) << j`)
- 方法二:分治法,每2位一组交换后合并(时间复杂度更低)
- 示例:101100B → 010110B
总结
解决二进制问题需掌握基础运算规则,并根据具体题型选择合适方法。对于复杂问题(如字符串操作或算法题),建议分步拆解并验证每一步的正确性。练习时可通过手动计算或编写代码辅助理解。