0:前言
1:代码当a和b相加出现溢出的时候采用
(a&b)+((a^b)>>1)
2:解释
想象一下a和b按照位整齐排序,当a和b对应为上全为1的时候相加会使此位为0,并且会向前进一位,所以当出现对应位全为1的时候,直接在此位保留一个1就算对这两个对应位求平均值了
然后剩下就是对应位不全为1的时候,分为a的某一个位为1,对应的b的那个位为0,或者倒过来,或者两个都为0,这个时候就要把他们除以2(右移1位)了
然后把结果加起来就ok
0:前言
1:代码当a和b相加出现溢出的时候采用
(a&b)+((a^b)>>1)
2:解释
想象一下a和b按照位整齐排序,当a和b对应为上全为1的时候相加会使此位为0,并且会向前进一位,所以当出现对应位全为1的时候,直接在此位保留一个1就算对这两个对应位求平均值了
然后剩下就是对应位不全为1的时候,分为a的某一个位为1,对应的b的那个位为0,或者倒过来,或者两个都为0,这个时候就要把他们除以2(右移1位)了
然后把结果加起来就ok