位运算相关

169 阅读1分钟

剑指offer64.求1+2+..+n

可以通过位运算来代替判断语句。

a || b 当a为真,则直接跳过,不用判断b。

a && b当a为假(0),则也直接跳过,不用判断b。

剑指offer 15.二进制中1的个数

最快的方式时间复杂度O(log n),观察 n & (n - 1) 操作可以使得最小位上的1消失,不断的循环此过程可以得到答案。

或者更暴力的方式,O(n)解法,将 n & (1 << i) ,不为0则说明第 i 位有一个1,循环此过程并计数可以得到答案。

剑指offer65.不用加减乘除做加法

加法分为两个步骤,不进位的加法可以通过异或实现,进位的加法可以通过与操作和右移一位实现。

第一步先将判断carry = a & b << 1,即判断进位carry大小。然后将 a ^ b得到不进位加法,此时还要加上进位carry的值。加上carry通过再次循环此过程实现,即将不进位加法变成a,进位加法变成b,继续计算他们之和。直到进位b为0。