赞
踩
思路:先从10进制的运算开始理解, 7 + 8,首先计算不考虑进位的相加,结果为5,第二步只计算进位部分,为1向左偏移一位,1>>1即10,注意,如果第二步计算出来等于0,那意味着没有进位情况,第一步所求的结果就是结果值,但是,当第二步求出的结果不为0的时候,则需要继续运算,被运算的数即第一步和第二步求出的数,10+5,10+5第一步运算结果为15,第二步运算结果为0,即15就是所求结果。
二进制运算思路:
同样我们可以用三步走的方式计算二进制值相加: 5—101,7—111
第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。
第二步:计算进位值,得到1010,相当于各位进行与操作得到101,再向左移一位得到1010,(101&111)<<1。
第三步重复上述两步,各位相加 010^1010=1000,进位值为100=(010 & 1010)<<1。
继续重复上述两步:1000^100 = 1100,进位值为0,跳出循环,1100为最终结果。
结束条件:进位为0,即为最终的求和结果。
function getSum(a: number, b: number): number {
var c:number;
while (b != 0){
c = (a&b);
a = a^b;
b= (c)<<1;
}
return a;
};
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。