二进制编码面试技巧指南
简介
在编码面试中,二进制数系统和位操作的知识点相对不那么重要,因为大多数软件工程师不需要处理位,这些在处理较低级别的系统和编程语言时更常用。但有时仍然会被问到,所以至少你应该知道如何在所选的编程语言中将数字从十进制形式转换为二进制形式(反之亦然)。
学习资源
阅读材料 - 位、字节与构建二进制,basecs - 位运算,维基百科 视频 - 算法:位操作,HackerRank 实践 - 使用位操作进行练习
注意事项
- 注意并检查溢出/下溢
- 负数
技巧
有时会问到涉及二进制表示和位运算的问题,你必须非常熟悉如何在所选的编程语言中将数字从十进制形式转换为二进制形式(反之亦然)。
一些有用的实用代码片段:
技巧 | 代码 |
---|---|
测试第k位是否设置 | num & (1 << k) != 0 。 |
设置第k位 | num |= (1 << k) |
关闭第k位 | num &= ~(1 << k) 。 |
切换第k位 | num ^= (1 << k) 。 |
将数字乘以2k | num << k |
将数字除以2k | num >> k |
检查一个数字是否是2的幂 | (num & num - 1) == 0 或 (num & (-num)) == num |
交换两个变量 | num1 ^= num2; num2 ^= num1; num1 ^= num2 |
必答题
如果你正在为这个主题学习,这是必须练习的必答题。
推荐练习题
在你已经为这个主题学习和练习了必答题之后,这是推荐的练习题。
推荐课程
import AlgorithmCourses from '../_courses/AlgorithmCourses.md'