结合 LeetCode 上的几道简单题再谈谈位操作(二):异或的魅力

文章目录 接着上一篇文章来讲些简单的位操作,这篇侧重的是异或的一些用途,不过其实前一篇文章的后面两道题也都有部分用到异或的内容,可见它的用途还算是挺广泛的。下面来看一些更加贴近异或操作思维的题目。 Problem 136. Single Number 把一个非空数组里只出现一次的数字找出来,剩下的数字保证是出现两次的。这个直接用异或的特性就行了,一个数如果和自身进行按位异或的话,因为每一位都对应相等,所以结果就是一串 0。这样我们把整个数组遍历异或一遍,重复的数字都消掉了,结果就是那个只出现了一次的值,毕竟一个数字和 0 异或之后得到的是它本身: class Solution { public: »

结合 LeetCode 上的几道简单题再谈谈位操作(一):对前文的拓展

文章目录 大概那么五六七个月之前,我看到《编程之美》中某道位操作相关的题目,觉得挺有意思,于是稍微整理了一下相关的知识瞎扯出了 从《编程之美》中的一道面试题开始谈谈位操作 这篇文章,今天突然心血来潮点进从来没用过的 LeetCode 发现有一个 Bit Manipulation 的分类专题,于是就挑了其中几道简单的题目做,因此导致了这篇和下篇文章的突然诞生。 首先有几题是可以直接用上前篇文章里面讲到的位操作技巧的,比如通过 n &= (n - 1) »

从《编程之美》中的一道面试题开始谈谈位操作

文章目录 在计算机的内部,数据都是使用二进制表示的,而对于计算机来说,进行基于二进制的位操作,效率要比进行除法、取余等操作高很多。最常见的对代码的优化就包含将乘除 2 的幂操作改为左右移位操作,很多时候编译器也会对代码自动执行这个优化。 我第一次在算法题的代码里见到位操作应该是在高二的时候,某个晚自习不想学习然后跑到机房去乱翻别人的博客发现这个,顿时就感觉如沐春风出神入化,所以一直印象挺深刻的。这个学期开学后不久在图书馆发现了《编程之美》这本书,虽然里面的好多内容都看不懂,其中有一道题感觉还蛮有趣的,就想从这道题出发,简单整理一下自己了解过的一些位操作相关的知识。 题目是这样的: 2.1 求二进制数中 »